答え合わせ
判定データを用意してくれている問題が出てきたので,出力ファイルが等しいか見てくれるプログラムを作ってみました.
でも,あと2人はLinux使いさんだから必要ないかな.
実行ファイルがほしいようなら渡すから言ってね.
#include <stdio.h> #include <string.h> int main(int argc, char** argv) { // // コマンド入力 // if(argc != 3) { printf("ファイル名を2つ入力してください. こんな感じに-> diff.exe file1.txt file2.txt\n"); return 1; } // // 入力 // // ファイルを開く FILE *pfI1, *pfI2; // 1つの入力ファイルポインタ fopen_s(&pfI1, argv[1], "r"); if(pfI1 == NULL) { printf("1つ目の入力ファイルが開けません.\n"); return 2; } fopen_s(&pfI2, argv[2], "r"); if(pfI2 == NULL) { printf("2つ目の入力ファイルが開けません.\n"); fclose(pfI1); return 2; } // // 処理 // // 1つずつ見ていって,等しくないものを出力する bool f = true; // 最後まで読んだら抜ける int l = 1; // 行数 while(f) { char *s1 = new char [256]; char *s2 = new char [256]; // どちらかが最後の行になるまで出力 s1 = fgets(s1, 256, pfI1); s2 = fgets(s2, 256, pfI2); if(s1 != NULL && s2 != NULL) { if(strcmp(s1, s2) != 0) { printf("l: %3d => ", l); printf("1 -> %s", s1); printf(" => 2 -> %s", s2); } } else { if(s1 != NULL) { printf("s1に行があまっています.\n"); do { printf("l: %3d => ", l); printf("1 -> %s", s1); l += 1; }while(fgets(s1, 256, pfI1) != NULL); } else if(s2 != NULL) { printf("s2に行があまっています.\n"); do { printf("l: %3d => ", l); printf("2 -> %s", s2); l += 1; }while(fgets(s2, 256, pfI2) != NULL); } else printf("両方まったく同じです.\n"); f = false; } l += 1; // 行数を進める delete [] s1; delete [] s2; } // // 後片付け // fclose(pfI1); fclose(pfI2); return 0; }