#include #include #include #define MAX_SIFRA 16 typedef struct { int dan; int mesec; int godina; char sifra[MAX_SIFRA]; } ISPIT; void greska(); int poredi(const void *a, const void *b); int main() { FILE *ulaz = fopen("ispiti.txt", "r"); if(ulaz == NULL) greska(); ISPIT *niz = (ISPIT*)malloc(sizeof(ISPIT)); if(niz == NULL) greska(); ISPIT *pom = niz; int i = 0; while(fscanf(ulaz, "%s%d%d%d", niz[i].sifra, &niz[i].dan, &niz[i].mesec, &niz[i].godina) == 4) { if(niz[i].dan <= 0 || niz[i].mesec <= 0 || niz[i].mesec >= 13 || niz[i].godina <= 0) greska(); i++; pom = realloc(niz, (i+1) * sizeof(ISPIT)); if(pom == NULL) greska(); niz = pom; } int n = i; qsort(niz, n, sizeof(ISPIT), poredi); for(i = 0; i < n; i++) printf("%s ", niz[i].sifra); fclose(ulaz); return 0; } void greska() { fprintf(stderr, "-1"); exit(EXIT_FAILURE); } int poredi(const void *a, const void *b) { ISPIT* prvi = (ISPIT*)a; ISPIT* drugi = (ISPIT*)b; if(prvi->godina < drugi->godina) return -1; else if(prvi->godina > drugi->godina) return 1; else { if(prvi->mesec < drugi->mesec) return -1; else if(prvi->mesec > drugi->mesec) return 1; else { if(prvi->dan < drugi->dan) return -1; else if(prvi->dan > drugi->dan) return 1; else { return strcmp(drugi->sifra, prvi->sifra); } } } }