72 lines
1.8 KiB
C
72 lines
1.8 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
#define MAX_NAME_LEN 101
|
|
#define LIST_SIZE 1000
|
|
|
|
struct pizza {
|
|
char name[MAX_NAME_LEN];
|
|
float price;
|
|
};
|
|
|
|
int read_item(struct pizza* item) {
|
|
char buffer[256];
|
|
|
|
if (fgets(buffer, sizeof(buffer), stdin) == NULL)// назва
|
|
return 0;
|
|
|
|
buffer[strcspn(buffer, "\n")] = '\0'; // забір пропусків
|
|
if (strlen(buffer) == 0)
|
|
return 0;
|
|
|
|
strncpy(item->name, buffer, MAX_NAME_LEN);
|
|
item->name[MAX_NAME_LEN - 1] = '\0';
|
|
if (fgets(buffer, sizeof(buffer), stdin) == NULL)// ціна
|
|
return 0;
|
|
|
|
buffer[strcspn(buffer, "\n")] = '\0';
|
|
char* endptr;
|
|
item->price = strtof(buffer, &endptr);
|
|
while (*endptr == ' ') endptr++;
|
|
|
|
if (*endptr != '\0') return 0; // некоректне число
|
|
|
|
return 1;}
|
|
|
|
int read_pizza_list(struct pizza* list) {
|
|
int counter = 0;
|
|
|
|
for (int i = 0; i < LIST_SIZE; i++) {
|
|
struct pizza item;
|
|
memset(&item, 0, sizeof(struct pizza));
|
|
|
|
int r = read_item(&item);
|
|
if (r) {
|
|
memcpy(&list[i], &item, sizeof(struct pizza));
|
|
counter += 1;
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return counter;}
|
|
|
|
|
|
int compare_pizza(const void* a, const void* b) {
|
|
const struct pizza* p1 = (const struct pizza*)a;
|
|
const struct pizza* p2 = (const struct pizza*)b;
|
|
if (p1->price < p2->price) return -1;
|
|
if (p1->price > p2->price) return 1;
|
|
return strcmp(p1->name, p2->name);}
|
|
|
|
int main() {
|
|
struct pizza list[LIST_SIZE];
|
|
memset(list, 0, LIST_SIZE * sizeof(struct pizza));
|
|
int count = read_pizza_list(list);
|
|
|
|
qsort(list, count, sizeof(struct pizza), compare_pizza);
|
|
for (int i = 0; i < count; i++) {
|
|
printf("%s\n%.6f\n", list[i].name, list[i].price);}
|
|
|
|
return 0;} |