test
This commit is contained in:
parent
a0591fedab
commit
af361fdfeb
@ -1,56 +1,59 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
#define MAX_PIZZAS 100
|
#define MAX_PIZZAS 100
|
||||||
#define MAX_TITLE_LENGTH 100
|
#define MAX_NAME_LENGTH 101
|
||||||
#define MAX_PRICE_LENGTH 10
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char title[MAX_TITLE_LENGTH];
|
char name[MAX_NAME_LENGTH];
|
||||||
float price;
|
double price;
|
||||||
} Pizza;
|
} Pizza;
|
||||||
|
|
||||||
int compare_pizzas(const void *a, const void *b) {
|
|
||||||
Pizza *pizza1 = (Pizza *)a;
|
|
||||||
Pizza *pizza2 = (Pizza *)b;
|
|
||||||
|
|
||||||
if (pizza1->price < pizza2->price) {
|
int compare(const void *a, const void *b) {
|
||||||
return -1;
|
const Pizza *pizzaA = (const Pizza *)a;
|
||||||
} else if (pizza1->price > pizza2->price) {
|
const Pizza *pizzaB = (const Pizza *)b;
|
||||||
return 1;
|
|
||||||
} else {
|
|
||||||
return strcmp(pizza1->title, pizza2->title);
|
if (pizzaA->price != pizzaB->price) {
|
||||||
|
return (pizzaA->price < pizzaB->price) ? -1 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return strcasecmp(pizzaA->name, pizzaB->name);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int readPizza(Pizza *pizza) {
|
||||||
|
if (!fgets(pizza->name, sizeof(pizza->name), stdin)) return 0;
|
||||||
|
pizza->name[strcspn(pizza->name, "\n")] = 0;
|
||||||
|
|
||||||
|
char priceStr[10];
|
||||||
|
if (!fgets(priceStr, sizeof(priceStr), stdin)) return 0;
|
||||||
|
priceStr[strcspn(priceStr, "\n")] = 0;
|
||||||
|
|
||||||
|
char *endptr;
|
||||||
|
pizza->price = strtod(priceStr, &endptr);
|
||||||
|
return *endptr == '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
Pizza pizzas[MAX_PIZZAS];
|
Pizza menu[MAX_PIZZAS];
|
||||||
int num_pizzas = 0;
|
int count = 0;
|
||||||
|
|
||||||
while (num_pizzas < MAX_PIZZAS) {
|
while (count < MAX_PIZZAS) {
|
||||||
printf("Enter pizza title: ");
|
if (!readPizza(&menu[count])) break;
|
||||||
fgets(pizzas[num_pizzas].title, MAX_TITLE_LENGTH, stdin);
|
count++;
|
||||||
pizzas[num_pizzas].title[strcspn(pizzas[num_pizzas].title, "\n")] = 0;
|
|
||||||
|
|
||||||
printf("Enter pizza price: ");
|
|
||||||
char price_str[MAX_PRICE_LENGTH];
|
|
||||||
fgets(price_str, MAX_PRICE_LENGTH, stdin);
|
|
||||||
price_str[strcspn(price_str, "\n")] = 0;
|
|
||||||
|
|
||||||
char *endptr;
|
|
||||||
pizzas[num_pizzas].price = strtof(price_str, &endptr);
|
|
||||||
if (endptr == price_str || *endptr != '\0') {
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
num_pizzas++;
|
|
||||||
}
|
|
||||||
|
|
||||||
qsort(pizzas, num_pizzas, sizeof(Pizza), compare_pizzas);
|
qsort(menu, count, sizeof(Pizza), compare);
|
||||||
|
|
||||||
for (int i = 0; i < num_pizzas; i++) {
|
|
||||||
printf("%s\n%.6f\n", pizzas[i].title, pizzas[i].price);
|
for (int i = 0; i < count; i++) {
|
||||||
|
printf("%s\n%.6f\n", menu[i].name, menu[i].price);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user