usaa25/du2/program.c
2025-10-09 08:48:47 +02:00

73 lines
1.4 KiB
C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LINESIZE 100
#define MAXITEMS 100
// struktura pre polozku jed. listka
struct pizza {
char name[LINESIZE];
float price;
};
//funkcia na nacitanie jednej polozky
int read_pizza(struct pizza *item) {
char line1[LINESIZE];
char line2[LINESIZE];
//nazov
if (!fgets(line1, sizeof(line1), stdin)) return 0;
line1[strcspn(line1, "\n")] = 0;
if (strlen(line1) == 0) return 0;
//cena
if (!fgets(line2, sizeof(line2), stdin)) return 0;
line2[strcspn(line2, "\n")] = 0;
float value = 0.0f;
if (sscanf(line2, "%f", &value) != 1) return 0;
if (value == 0.0f) return 0;
strcpy(item->name, line1);
item->price = value;
return 1;
}
//porovnanie pre qsort
int compare_pizza(const void *a, const void *b){
const struct pizza *pa = (const struct pizza *)a;
const struct pizza *pb = (const struct pizza *)b;
if (pa->price < pb->price) return -1;
if (pa->price > pb->price) return 1;
return strcmp(pa->name, pb->name);
}
int main() {
struct pizza list[MAXITEMS];
memset(list, 0, sizeof(list));
//nacitanie listka
int count = 0;
while (count < MAXITEMS && read_pizza(&list[count])){
count++;
}
//ukoncit ak ziadne polozky
if (count == 0) return 0;
//triedenie
qsort(list, count, sizeof(struct pizza), compare_pizza);
//vypis listka
for (int i = 0; i < count; i++){
printf("%s\n", list[i].name);
printf("%s\n", list[i].price);
}
return 0;
}