diff --git a/cv10/program.c b/cv10/program.c index 167d124..387e704 100644 --- a/cv10/program.c +++ b/cv10/program.c @@ -1,80 +1,56 @@ #include -#include #include +#include -typedef struct Student { - char name[100]; - int applied; -} Student; +#define MAX_STUDENTS 100 +#define NAME_SIZE 50 -int cmpfunc(const void *a, const void *b) { - Student *student1 = (Student *)a; - Student *student2 = (Student *)b; - return strcmp(student1->name, student2->name); +int compare_names(const void *a, const void *b) { + const char **name_a = a; + const char **name_b = b; + return strcmp(*name_a, *name_b); } int main() { - int max_students, num_students; - char name[100]; - Student students[1000]; - int students_accepted = 0; - int i, j; + int max_students, num_accepted = 0, num_students = 0; + char names[MAX_STUDENTS][NAME_SIZE]; + char temp_name[NAME_SIZE]; - if (scanf("%d", &max_students) != 1 || max_students <= 0) { - puts("Nespravny vstup"); + scanf("%d", &max_students); + if (max_students <= 0 || max_students > MAX_STUDENTS) { + printf("Nespravny vstup\n"); return 1; } - if (getchar() == '\n') { - puts("Nespravny vstup"); - return 1; - } + memset(names, 0, sizeof(names)); - if (scanf("%d", &num_students) != 1 || num_students <= 0) { - puts("Nespravny vstup"); - return 1; - } + while (fgets(temp_name, sizeof(temp_name), stdin) != NULL && num_accepted < max_students) { - if (num_students > max_students) { - num_students = max_students; - } + int i, found = 0; - for (i = 0; i < num_students; i++) { - if (scanf("%s", name) != 1) { - puts("Ziadne prihlasky"); - return 1; - } - - for (j = 0; j < i; j++) { - if (strcmp(students[j].name, name) == 0) { + for (i = 0; i < num_accepted; i++) { + if (strcmp(names[i], temp_name) == 0) { + found = 1; break; } } - if (j == i) { - strcpy(students[i].name, name); - students[i].applied = 1; + if (!found) { + strcpy(names[num_accepted], temp_name); + num_accepted++; } + num_students++; } - qsort(students, i, sizeof(Student), cmpfunc); + // sort the names by alphabet + qsort(names, num_accepted, sizeof(char*) * NAME_SIZE, compare_names); - printf("Prijati students:\n"); - for (i = 0; i < max_students; i++) { - if (students[i].applied == 1) { - printf("%s\n", students[i].name); - students_accepted++; - } else { - break; - } - } - - if (students_accepted < num_students) { - printf("Neprijati studenti:\n"); - for (i = 0; i < num_students; i++) { - if (students[i].applied == 0) { - printf("%s\n", students[i].name); - } + if (num_accepted == 0) { + printf("Ziadne prihlasky"); + } else { + printf("Prijati studenti:\n"); + for (int i = 0; i < num_accepted; i++) { + printf("%s", names[i]); } }