usaa25/du2/program.c
2025-10-06 17:13:22 +02:00

61 lines
1.4 KiB
C

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LIST_SIZE 100
#define LINE_SIZE 101
struct pizza {
char name[101];
float prize;
};
int read_pizza_list(struct pizza* list) {
int counter = 0;
char line[200];
for (int i=0; i < LIST_SIZE; i++) {
struct pizza item;
memset(&item,0,sizeof(struct pizza));
if (fgets(line, sizeof(line), stdin)==NULL) {
break;
}
if (sscanf(line, "%[^\n]", item.name) !=1) {
break;
}
if (fgets(line, sizeof(line), stdin)==NULL) {
break;
}
if (sscanf(line, "%f", &item.prize) !=1) {
break;
}
memcpy(&list[i], &item,sizeof(struct pizza));
counter +=1;
}
return counter;
}
int compare (const void* a, const void* b) {
struct pizza* pizza_a = (struct pizza*)a;
struct pizza* pizza_b = (struct pizza*)b;
int result;
if (pizza_a->prize < pizza_b->prize) {
result=-1;
} else if (pizza_a->prize > pizza_b->prize) {
result=1;
} else {
result = strcmp(pizza_a->name, pizza_b->name);
}
return result;
}
int main() {
struct pizza list[LIST_SIZE];
int kolichestvo = read_pizza_list(list);
qsort(list, kolichestvo, sizeof(struct pizza), compare);
for (int i=0;i<kolichestvo;i++) {
printf("%s\n%f\n", list[i].name, list[i].prize);
}
return 0;
}