From fc09a40328284a02a8e4313e951a4821d8de5947 Mon Sep 17 00:00:00 2001 From: VIliam Date: Fri, 22 Mar 2024 00:36:34 +0100 Subject: [PATCH] cv5 --- cv5/program.c | 52 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 34 insertions(+), 18 deletions(-) diff --git a/cv5/program.c b/cv5/program.c index 9d1a174..bb6ff0e 100644 --- a/cv5/program.c +++ b/cv5/program.c @@ -6,7 +6,8 @@ // Štruktúra pre uloženie informácií o študentovi struct student { - char name[2 * SIZE]; // Zvýšená veľkosť pre celé meno (meno + priezvisko) + char first_name[SIZE]; + char last_name[SIZE]; int votes; }; @@ -19,15 +20,20 @@ int compare(const void* p1, const void* p2) { if (s1->votes != s2->votes) { return s2->votes - s1->votes; // Zoradíme zostupne podľa počtu hlasov } else { - // Ak majú rovnaký počet hlasov, zoradíme lexikograficky podľa mena - return strcmp(s1->name, s2->name); + // Ak majú rovnaký počet hlasov, zoradíme lexikograficky podľa priezviska a potom mena + int cmp = strcmp(s1->last_name, s2->last_name); + if (cmp != 0) { + return cmp; + } else { + return strcmp(s1->first_name, s2->first_name); + } } } // Funkcia na vyhľadanie študenta v databáze -int find_student(struct student* students, int size, const char* name) { +int find_student(struct student* students, int size, const char* first_name, const char* last_name) { for (int i = 0; i < size; ++i) { - if (strcmp(students[i].name, name) == 0) { + if (strcmp(students[i].first_name, first_name) == 0 && strcmp(students[i].last_name, last_name) == 0) { return i; // Nájdený študent } } @@ -41,27 +47,32 @@ int main() { int size = 0; // Aktuálny počet študentov v databáze // Načítanie hlasov zo vstupu - char line[2 * SIZE]; // Zvýšená veľkosť pre celý riadok (meno + priezvisko) - while (fgets(line, 2 * SIZE, stdin) != NULL) { - char name[2 * SIZE]; // Zvýšená veľkosť pre celé meno (meno + priezvisko) + char line[SIZE]; + int valid_input = 0; // Kontrola platného vstupu + while (fgets(line, SIZE, stdin) != NULL) { + char first_name[SIZE]; + char last_name[SIZE]; int votes; // Rozdelenie riadku na počet hlasov a meno študenta - if (sscanf(line, "%d %[^\n]", &votes, name) != 2) { + if (sscanf(line, "%d %s %s", &votes, first_name, last_name) != 3) { fprintf(stderr, "Chybný formát vstupu!\n"); + valid_input = 1; break; } // Vyhľadanie študenta v databáze - int index = find_student(database, size, name); + int index = find_student(database, size, first_name, last_name); if (index == -1) { // Nový študent if (size < SIZE) { // Pridanie študenta do databázy - strcpy(database[size].name, name); + strcpy(database[size].first_name, first_name); + strcpy(database[size].last_name, last_name); database[size].votes = votes; size++; } else { fprintf(stderr, "Databáza je plná!\n"); + valid_input = 1; break; } } else { @@ -70,13 +81,18 @@ int main() { } } - // Zoradenie databázy podľa počtu hlasov a mena - qsort(database, size, sizeof(struct student), compare); - - // Výpis výsledkov - printf("Vysledky:\n"); - for (int i = 0; i < size; ++i) { - printf("%d %s\n", database[i].votes, database[i].name); + if (!valid_input) { + // Zoradenie databázy podľa počtu hlasov a priezviska + qsort(database, size, sizeof(struct student), compare); + + // Výpis výsledkov + printf("Vysledky:\n"); + for (int i = 0; i < size; ++i) { + printf("%d %s %s\n", database[i].votes, database[i].first_name, database[i].last_name); + } + } else { + printf("Nepodarilo nacitat nic\n"); } + return 0; }