usaa24/cv2/program.c

74 lines
2.1 KiB
C

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
#define LINESIZE 100
#define MAX_ITEMS 100 // Максимальна кількість елементів меню
struct MenuItem {
char name[LINESIZE];
float price;
};
// Функція порівняння для сортування
int compare_menu_items(const void* a, const void* b) {
struct MenuItem* item1 = (struct MenuItem*)a;
struct MenuItem* item2 = (struct MenuItem*)b;
if (item1->price != item2->price) {
return (item1->price > item2->price) - (item1->price < item2->price);
}
return strcmp(item1->name, item2->name);
}
// Функція для видалення символу нового рядка
void remove_newline(char* str) {
str[strcspn(str, "\n")] = '\0';
}
// Читання одного елемента меню
int read_menu_item(struct MenuItem* item) {
if (fgets(item->name, LINESIZE, stdin) == NULL) {
return 0; // Кінець вводу
}
remove_newline(item->name); // Видаляємо символ нового рядка
// Перевірка на кінець введення (наприклад, "end")
if (strcmp(item->name, "end") == 0) {
return 0;
}
// Читання ціни
if (scanf("%f", &item->price) != 1) {
return 0; // Неправильний формат
}
getchar(); // Споживаємо символ нового рядка після ціни
return 1;
}
int main(void) {
struct MenuItem menu[MAX_ITEMS];
int item_count = 0;
printf("Zadaj jedalny listok:\n");
// Читання елементів меню
while (item_count < MAX_ITEMS && read_menu_item(&menu[item_count])) {
item_count++;
}
// Сортування меню
qsort(menu, item_count, sizeof(struct MenuItem), compare_menu_items);
// Виведення відсортованого меню
for (int i = 0; i < item_count; i++) {
printf("%s\n", menu[i].name);
printf("%.6f\n", menu[i].price); // Виведення ціни з 6 знаками після коми
}
return 0;
}