diff --git a/cv5/program.c b/cv5/program.c index d36229e..8a13dea 100644 --- a/cv5/program.c +++ b/cv5/program.c @@ -4,52 +4,55 @@ #define SIZE 100 -// Štruktúra pre reprezentáciu študenta typedef struct { - char name[SIZE]; - int votes; + char* meno; + int hlasov; } Student; -// Funkcia na pridanie študenta do databázy -void addStudent(Student database[], char name[], int votes, int *count) { - strcpy(database[*count].name, name); - database[*count].votes = votes; - (*count)++; -} - int main() { char line[SIZE]; - char name[SIZE]; - int votes; + int num_students = 0; + Student* students = NULL; - // Databáza študentov - Student database[SIZE]; - int count = 0; - - printf("Zadajte mená študentov a počet hlasov:\n"); - - while (1) { - // Načítanie riadku zo štandardného vstupu - if (fgets(line, SIZE, stdin) == NULL || line[0] == '\n') { - break; // Koniec načítania - } - - // Rozdelenie riadku na meno a počet hlasov - if (sscanf(line, "%s %d", name, &votes) != 2) { + while (fgets(line, SIZE, stdin) != NULL) { + int hlasov; + char meno[SIZE]; + if (sscanf(line, "%d %99[^\n]", &hlasov, meno) != 2) { printf("CHYBA: Neplatny zapis na riadku.\n"); - continue; + return 1; + } + + // Reallokácia pamäte pre ďalšieho študenta + students = realloc(students, (num_students + 1) * sizeof(Student)); + if (students == NULL) { + printf("CHYBA: Nepodarilo sa alokovať pamäť.\n"); + return 1; } - // Pridanie študenta do databázy - addStudent(database, name, votes, &count); + // Alokácia pamäte pre meno študenta a kópia mena + students[num_students].meno = malloc(strlen(meno) + 1); + if (students[num_students].meno == NULL) { + printf("CHYBA: Nepodarilo sa alokovať pamäť.\n"); + return 1; + } + strcpy(students[num_students].meno, meno); + students[num_students].hlasov = hlasov; + + num_students++; } // Výpis výsledkov - printf("\nVysledky:\n"); - for (int i = 0; i < count; i++) { - printf("%d %s\n", database[i].votes, database[i].name); + printf("Vysledky:\n"); + for (int i = 0; i < num_students; i++) { + printf("%d %s\n", students[i].hlasov, students[i].meno); } + // Uvoľnenie pamäte + for (int i = 0; i < num_students; i++) { + free(students[i].meno); + } + free(students); + return 0; }