/* primer75.c - zadatak iz K&R, 7.6, str. 163 originala: * * Sastaviti program koji poredi dve * datoteke i ispisuje prvi red koji se * razlikuje */ #include #include #include #define MAXR 100 /* Maksimalna duzina reda */ main(int argc, char *argv[]) { FILE *pd1, *pd2; void compdat( FILE * pd1, FILE *pd2 ); if( argc != 3 ) { /* nekorektan broj argumenata */ fprintf( stderr, "Potrebna su imena dve datoteke\n"); exit(1); } else { if( (pd1 = fopen( *++argv, "r" ) ) == NULL ) { fprintf( stderr, "Ne moze da se otvoi %s\n", *argv ); exit(1); } else if( ( pd2 = fopen( *++argv, "r" ) ) == NULL ) { fprintf( stderr, "Ne moze da se otvoi %s\n", *argv ); exit(1); } else { /* Datoteke mogu da se porede */ compdat( pd1, pd2 ); fclose( pd1 ); fclose( pd2 ); exit( 0 ); } } } /* compdat - poredi dve datoteke red po red */ void compdat( FILE * pd1, FILE *pd2 ) { char red1[MAXR], red2[MAXR]; char *pr1, *pr2; do { /* F. fgets vracxa ili pokazivacy na procyitani red, ili * NULL, za kraj datoteke */ pr1 = fgets( red1, MAXR, pd1 ); pr2 = fgets( red2, MAXR, pd2 ); /* Ako pr1 i pr2 ne pokazuju na odgovarajuce redove, ili smo * stigli na kraj jedne od datoteka, ili su datoteke razlicite */ if( pr1 == red1 && pr2 == red2 ) { /* Ako pr1 i pr2 pokauju na odgovarajucxe redove, onda nismo dosxli do * krajeva datoteka, i treba uporediti redove */ if( strcmp( red1, red2) != 0 ) { printf("prva razlika u redu\n %s\n", red1); pr1 = pr2 = NULL; } } else if( pr1 != red1 && pr2 == red2 ) { printf("Kraj prve datoteke u redu: \n %s\n", red2 ); } else if( pr1 == red1 && pr2 != red2 ) { printf("Kraj druge datoteke u redu: \n %s\n", red1); } /* Ako pr1 i pr2 ne pokazuju na odgovarajuce redove, dosli * smo do kraja obe datoteke --> onda su one istovetne */ } while( pr1 == red1 && pr2 == red2 ); }