演習7-6 K&R プログラミング言語C

演習7-6

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXSIZE 1024

int main(int argc, char *argv[])
{
    char *prog = argv[0];
    FILE *fp1, *fp2;
    void filediff(FILE*, FILE*);

    if (argc == 3) {
        if ((fp1 = fopen(argv[1], "r")) == NULL) {
            fprintf(stderr, "%s: can't open %s\n", prog, argv[1]);
            exit(EXIT_FAILURE);
        }
        if ((fp2 = fopen(argv[2], "r")) == NULL) {
            fprintf(stderr, "%s: can't open %s\n", prog, argv[2]);
            exit(EXIT_FAILURE);
        }
        filediff(fp1, fp2);
        fclose(fp1);
        fclose(fp2);
    } else {
        fprintf(stderr, "%s: 2 file required\n", prog);
        exit(EXIT_FAILURE);
    }


    return 0;
}

void filediff(FILE *fp1, FILE *fp2)
{
    char line1[MAXSIZE], line2[MAXSIZE];
    int count = 1;

    while ((fgets(line1, MAXSIZE, fp1) != NULL) &&
           (fgets(line2, MAXSIZE, fp2) != NULL)) {
        if (strcmp(line1, line2) != 0) {
            printf("%d\n%s%s", count, line1, line2);
            exit(EXIT_SUCCESS);
        }
        count++;
    }
}

実行結果

$ cat foo.txt
hello, world
hello, world
hello, world
hello, world
hello, world
hello, world
$ cat moo.txt
hello, world
hello, world
hello, world
hello, world!
hello, world
hello, world
$ ./ex7-6 foo.txt moo.txt
4
hello, world
hello, world!
プログラミング言語C 第2版 ANSI規格準拠
B.W. カーニハン D.M. リッチー
共立出版
売り上げランキング: 9726
«
»