diff --git a/du4/program.c b/du4/program.c index f2acd33..eaecf7a 100644 --- a/du4/program.c +++ b/du4/program.c @@ -12,47 +12,69 @@ struct student { struct student databaza[SIZE]; int size = 0; -int find_student(const char* name) { - for (int i = 0; i < size; i++) { - if (strcmp(databaza[i].name, name) == 0) { +int find_student(const char* name){ + for (int i = 0; i < size; i++){ + if (strcmp(databaza[i].name, name) == 0){ return i; } } return -1; } +int compare(const void* a, const void* b) { + struct student* s1 = (struct student*)a; + struct student* s2 = (struct student*)b; + + if (s1->votes > s2->votes) { + return -1; + } else if (s1->votes < s2->votes) { + return 1; + } else { + return strcmp(s1->name, s2->name); + } +} int main() { char line[SIZE]; memset(databaza, 0, sizeof(databaza)); - while (fgets(line, SIZE, stdin)) { char* end = NULL; int votes = strtol(line, &end, 10); - if (votes <= 0) { + if (votes <= 0 || *end != ' '){ + printf("Chyba: Nespravny format vstupu!\n"); continue; } char name[SIZE]; memset(name, 0, SIZE); strncpy(name, end + 1, strlen(end + 1) - 1); - int id = find_student(name); + if (id < 0){ + if (size >= SIZE){ + printf("Chyba: Databaza je plna!\n"); + continue; + } - if (id < 0) { strncpy(databaza[size].name, name, SIZE - 1); databaza[size].votes = votes; size++; - } else { + } + else + { databaza[id].votes += votes; } } + if (size == 0){ + printf("Chyba: Nebol nacitany ziadny platny zaznam!\n"); + return 1; + } + + qsort(databaza, size, sizeof(struct student), compare); + printf("Vysledky:\n"); for (int i = 0; i < size; i++) { printf("%d %s\n", databaza[i].votes, databaza[i].name); } - return 0; } -