From 4fcaed905ff8a2e2fb53540eb6bcf9597e331193 Mon Sep 17 00:00:00 2001 From: st529yr Date: Wed, 20 Mar 2024 13:59:55 +0100 Subject: [PATCH] funguje --- cv5/program.c | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/cv5/program.c b/cv5/program.c index 79adff4..5f4d879 100644 --- a/cv5/program.c +++ b/cv5/program.c @@ -2,43 +2,39 @@ #include #include -// Structure to hold student information (name and votes) +#define MAX_STUDENTS 100 +#define MAX_NAME_LENGTH 100 + typedef struct { - char name[100]; + char name[MAX_NAME_LENGTH]; int votes; } Student; -// Function to compare two students based on their votes and names int compare_students(const void *a, const void *b) { const Student *student1 = (const Student *)a; const Student *student2 = (const Student *)b; - // Sort by number of votes in descending order if (student1->votes != student2->votes) { return student2->votes - student1->votes; } else { - // If votes are equal, sort lexicographically by name return strcmp(student1->name, student2->name); } } int main() { char line[256]; - Student students[100]; + Student students[MAX_STUDENTS]; int total_students = 0; - // Read votes from standard input while (fgets(line, sizeof(line), stdin)) { int votes; - char name[100]; + char name[MAX_NAME_LENGTH]; - // Parse votes and name from input line if (sscanf(line, "%d %99[^\n]", &votes, name) != 2) { fprintf(stderr, "Error: Invalid input format.\n"); return 1; } - // Find if the student is already in the list int found = 0; for (int i = 0; i < total_students; i++) { if (strcmp(students[i].name, name) == 0) { @@ -48,18 +44,19 @@ int main() { } } - // If student not found, add to the list if (!found) { + if (total_students >= MAX_STUDENTS) { + fprintf(stderr, "Error: Too many students.\n"); + return 1; + } strcpy(students[total_students].name, name); students[total_students].votes = votes; total_students++; } } - // Sort the list of students based on votes and names qsort(students, total_students, sizeof(Student), compare_students); - // Print the outcome printf("Outcome:\n"); for (int i = 0; i < total_students; i++) { printf("%d %s\n", students[i].votes, students[i].name);