答え合わせ

判定データを用意してくれている問題が出てきたので,出力ファイルが等しいか見てくれるプログラムを作ってみました.
でも,あと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;
}