Aktualizovat du2/program.c
This commit is contained in:
parent
66bc27ceea
commit
1466ae5646
@ -0,0 +1,72 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#define MAX_NAME_LEN 101
|
||||
#define LIST_SIZE 1000
|
||||
|
||||
struct pizza {
|
||||
char name[MAX_NAME_LEN];
|
||||
float price;
|
||||
};
|
||||
|
||||
int read_item(struct pizza* item) {
|
||||
char buffer[256];
|
||||
|
||||
if (fgets(buffer, sizeof(buffer), stdin) == NULL)// назва
|
||||
return 0;
|
||||
|
||||
buffer[strcspn(buffer, "\n")] = '\0'; // забір пропусків
|
||||
if (strlen(buffer) == 0)
|
||||
return 0;
|
||||
|
||||
strncpy(item->name, buffer, MAX_NAME_LEN);
|
||||
item->name[MAX_NAME_LEN - 1] = '\0';
|
||||
if (fgets(buffer, sizeof(buffer), stdin) == NULL)// ціна
|
||||
return 0;
|
||||
|
||||
buffer[strcspn(buffer, "\n")] = '\0';
|
||||
char* endptr;
|
||||
item->price = strtof(buffer, &endptr);
|
||||
while (*endptr == ' ') endptr++;
|
||||
|
||||
if (*endptr != '\0') return 0; // некоректне число
|
||||
|
||||
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 += 1;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return counter;}
|
||||
|
||||
|
||||
int compare_pizza(const void* a, const void* b) {
|
||||
const struct pizza* p1 = (const struct pizza*)a;
|
||||
const struct pizza* p2 = (const struct pizza*)b;
|
||||
if (p1->price < p2->price) return -1;
|
||||
if (p1->price > p2->price) return 1;
|
||||
return strcmp(p1->name, p2->name);}
|
||||
|
||||
int main() {
|
||||
struct pizza list[LIST_SIZE];
|
||||
memset(list, 0, LIST_SIZE * sizeof(struct pizza));
|
||||
int count = read_pizza_list(list);
|
||||
|
||||
qsort(list, count, sizeof(struct pizza), compare_pizza);
|
||||
for (int i = 0; i < count; i++) {
|
||||
printf("%s\n%.6f\n", list[i].name, list[i].price);}
|
||||
|
||||
return 0;}
|
Loading…
Reference in New Issue
Block a user