いくつかのファイルが用意してあるとき、その中のファイルで中身が同じものがあるかどうかを調べるプログラムを作りたい。 そのために、二つのファイルの中身が同じであるかどうかを調べるプログラム作成する。
調べる対象の二つのファイルのファイル名は、コマンド行(コマンドライン)から与える。中身が同一であれば、 二つのファイルの名前を「,」で区切って並べた後に「: IDENTICAL」と出力し、 そうでなければ「: DIFFERENT」と出力するようにする。
まず、与えられた二つのファイル名について、 与えられた順にその名前を「,」で区切りながら書き出しす。このとき合わせてそのファイルが開けることを確認する。 どちらかが開けないとわかった時には、その時点でそのファイル名の直後に「: can't open.」と書き出して改行をした上で実行を終了 ( return 0; )する。この結果、1番目のファイル名でファイルが開けなかったときは最初のファイル名の直後に「: can't open.」が続くことになり、2番目のファイル名でファイルが開けなかったときは「,」で区切られて2つのファイル名が並び、その2番目のファイル名の直後に「: can't open.」が並ぶことになる
■成功例
コマンドライン入力
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.
c
1#include <stdio.h> 2#include <stdlib.h> 3int main(int argc, char *argv[]){ 4 5 #define fn "data1.txt" 6 #define gn "data2.txt" 7 #define kn "data3.txt" 8FILE *f, *g, *k; 9 f= fopen(fn, "r"); g= fopen(gn,"r"); k= fopen(kn,"r"); 10 if( f==NULL){ 11 printf("NG:%s\n",fn); exit(-1); 12 } 13g= fopen(gn, "r"); 14 if( g==NULL){ 15 printf("NG:%s\n",gn); exit(-1); 16 } 17if( k==NULL){ 18 printf("NG:%s\n",kn); exit(-1); 19 } 20 int cf, cg, ck; 21 22 while( (cf= fgetc(f))!=EOF && 23 (cg= fgetc(g))!=EOF && 24 (ck= fgetc(k))!=EOF){ 25 if( cf!=cg) break; 26 } 27 if( !(cf==EOF && fgetc(g)==EOF) ) 28 printf("%s, %s: DIFFERENT\n", fn,gn); 29 fclose(f); fclose(g); 30 31 return 0; 32}
お詳しい方
正しいプログラムを教えて頂きたく。。。
回答1件
あなたの回答
tips
プレビュー