75 lines
1.6 KiB
C
75 lines
1.6 KiB
C
|
|
#define LINE_SIZE 100
|
|
#define LIST_SIZE 75
|
|
#include <string.h>
|
|
#include <ctype.h>
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
struct pizza{
|
|
char name[LINE_SIZE];
|
|
float prize;
|
|
};
|
|
struct pizza list[LIST_SIZE];
|
|
|
|
int read_item(struct pizza *item) {
|
|
char line[LINE_SIZE];
|
|
char line2[LINE_SIZE];
|
|
if (!fgets(line, sizeof(line), stdin))
|
|
return 0;
|
|
if (strlen(line) == 0)
|
|
return 0;
|
|
if (!fgets(line2, sizeof(line2), stdin))
|
|
return 0;
|
|
|
|
char *endptr;
|
|
float value = strtof(line2, &endptr);
|
|
|
|
if (value == 0.0F)
|
|
return 0;
|
|
|
|
strcpy(item->name, line);
|
|
item->prize = value;
|
|
|
|
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++;
|
|
}
|
|
else{
|
|
break;;
|
|
}
|
|
}
|
|
return counter;
|
|
|
|
}
|
|
int compare_pizza (const void *a, const void *b){
|
|
float prize1 = ((struct pizza*)a)->prize;
|
|
float prize2 = ((struct pizza*)b)->prize;
|
|
int r2 = strcmp(((struct pizza*)a)->name, ((struct pizza*)b)->name);
|
|
int r;
|
|
if (prize1 < prize2){
|
|
r = -1;
|
|
return r;
|
|
}
|
|
else if(prize1 > prize2){
|
|
r = 1;
|
|
return r;
|
|
}
|
|
else{ return r2;}
|
|
}
|
|
int main(void){
|
|
int size= read_pizza_list(list);
|
|
qsort(list, size, sizeof(struct pizza), compare_pizza);
|
|
for(int i = 0; i<size; i++){
|
|
printf("%s%f\n", list[i].name, list[i].prize);
|
|
}
|
|
return 0;
|
|
} |