#include #include #include #define KORAK 10 typedef struct Student{ int dan; int mesec; int godina; char user[8]; } student; void greska(){ fprintf(stderr, "-1\n"); exit(EXIT_FAILURE); } int provera(student d){ return d.dan < 1 || d.dan > 31 || d.mesec < 1 || d.mesec > 12 || d.godina < 0 || d.godina > 9999; } int cmp(const void * ptr1, const void *ptr2){ const student * d1 = ptr1; const student * d2 = ptr2; int r = d1->godina - d2->godina; if(r == 0){ r = d1->mesec - d2->mesec; if(r == 0){ r = d1->dan - d2->dan; if(r == 0){ return strcmp(d1->user, d2->user); } } return r; } return r; } int main(int argc, char const *argv[]) { FILE * ulaz = fopen("studenti.txt", "r"); if(ulaz == NULL){ greska(); } int n; n = KORAK; student* d = malloc(n*sizeof(student)); if(d == NULL){ greska(); } int i = 0; while (fscanf(ulaz, "%s %d %d %d ", d[i].user, &d[i].dan, &d[i].mesec, &d[i].godina) != EOF) { if(provera(d[i])){ greska(); } i++; if(i == n){ n += KORAK; d = realloc(d, n*sizeof(student)); if(d == NULL){ greska(); } } } fclose(ulaz); n = i; qsort(d, n, sizeof(student), cmp); for(i = 0; i < n ; i++){ printf("%s ", d[i].user ); } free(d); printf("\n"); return 0; }