61 lines
1.4 KiB
C
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;
|
|
} |