#include #include #define MAX_NAZIV 26 void greska() { fprintf(stderr, "-1"); exit(EXIT_FAILURE); } typedef struct { char grad1[MAX_NAZIV]; char grad2[MAX_NAZIV]; float kilometraza; int trajanje; } LET; int poredi(const void *a, const void *b) { LET *prvi = (LET*)a; LET *drugi = (LET*)b; if(prvi->kilometraza < drugi->kilometraza) return 1; else if(prvi->kilometraza > drugi->kilometraza) return -1; return prvi->trajanje - drugi->trajanje; } int main() { FILE *ulaz = fopen("letovi.txt", "r"); if(ulaz == NULL) greska(); LET *niz = NULL; LET *pom = NULL; niz = malloc(sizeof(LET)); int i = 0; pom = niz; while(fscanf(ulaz, "%s %s %f %d", niz[i].grad1, niz[i].grad2, &niz[i].kilometraza, &niz[i].trajanje) == 4) { if(niz[i].trajanje <= 0) greska(); if(niz[i].kilometraza <= 0) greska(); i++; pom = realloc(niz, (i+1)*sizeof(LET)); if(pom == NULL) greska(); niz = pom; } int n = i; qsort(niz, n, sizeof(LET), poredi); for(i = 0; i < n; i++) printf("%s %s %.2f %d\n", niz[i].grad1, niz[i].grad2, niz[i].kilometraza, niz[i].trajanje); free(niz); fclose(ulaz); return 0; }