複数のファイルが用意してある時、その中のファイルで中身が同じものがあるかどうかを調べるプログラムを作りたいです。 そのために、二つのファイルの中身が同じであるかどうかを調べる必要有り。
調べる対象の二つのファイルのファイル名は、コマンド行(コマンドライン)から与える。中身が同一であれば、 二つのファイルの名前を「,」で区切って並べた後に「: IDENTICAL」と出力し、 そうでなければ「: DIFFERENT」と出力するようにする。
まず、与えられた二つのファイル名について、 与えられた順にその名前を「,」で区切りながら書き出して行く。このとき合わせてそのファイルが開けることを確認する。 どちらかが開けないとわかった時には、その時点でそのファイル名の直後に「: can't open.」と書き出して改行をした上で実行を終了 ( return 0; )する。この結果、1番目のファイル名でファイルが開けなかったときは最初のファイル名の直後に「: can't open.」が続くことになり、2番目のファイル名でファイルが開けなかったときは「,」で区切られて2つのファイル名が並び、その2番目のファイル名の直後に「: can't open.」が並ぶことになる。
■つぎのファイル群が実行環境に用意されているとします
ファイル名 内容
data1.txt ABCD EFG
data2.txt ABCD EfG
data3.txt ABCD EFG
■コマンドライン入力
data1.txt data2.txt
正解出力
data1.txt, data2.txt: DIFFERENT
■コマンドライン入力
data3.txt data1.txt
正解出力
data3.txt, data1.txt: IDETICAL
■コマンドライン入力
data4.txt data1.txt
正解出力
data4.txt: can't open.
■コマンドライン入力
data3.txt data1.c
正解出力
data3.txt, data1.c: can't open.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
#define fn "data1.txt"
#define gn "data2.txt"
FILE *f, *g;
f= fopen(fn, "r"); g= fopen(gn,"r");
if( f==NULL){
printf("NG:%s\n",fn); exit(-1);
}
g= fopen(gn, "r");
if( g==NULL){
printf("NG:%s\n",gn); exit(-1);
}
int cf, cg;
while( (cf= fgetc(f))!=EOF &&
(cg= fgetc(g))!=EOF ){
if( cf!=cg ) break;
}
if( !(cf==EOF && fgetc(g)==EOF) )
printf("%s and %s differ.\n", fn,gn);
fclose(f); fclose(g);
return 0;
}
上記の正解出力となりません。
お助け頂きたく。