さて、私はCプログラムを書いています。プログラムは非常に単純です。プログラムを実行するときに、いくつかのパラメーターを指定します。例/proj1 cat hat batので、プログラムが提供する単語のリストを入力するように求められます。 "、および"bat"はそのリストで発生します。私はプログラムがうまく機能しています。
Example
./pro1 cat hat bat
cat
.
(プログラムは入力の終わりとして「。」を認識しました)
Result:
cat:1
hat:0
bat:0
さて、私のプログラムは私が考えることができるすべてのテストケースで完全に実行されますが、私の教授が行った一連のテストに合格する必要があります。これがそのテストのコードです。
char *args[] = {"./main", "cat", "hat","bat",NULL};
char *result[] = {"Looking for 3 words\n",
"Result:\n",
"cat:1\n",
"hat:0\n",
"bat:0\n"};
FILE *out;
FILE *test;
test=fopen("test","w");
int i;
char *buffer=malloc(100*sizeof(char));
out = fopen("smp0.in", "w");
fprintf(out, "cat\n");
fprintf(out, ".\n");
fclose(out);
freopen("smp0.in", "r", stdin);
freopen("smp0.out", "w", stdout);
quit_if(main(4, args) != EXIT_SUCCESS);
fclose(stdin);
fclose(stdout);
out = fopen("smp0.out", "r");
for (i = 0; i < 5; i++) {
quit_if(fgets(buffer, 100, out) == NULL);
quit_if(strcmp(buffer, result[i]));
}
fclose(out);
return EXIT_SUCCESS;
}
わかりました。quit_if()を送信すると、失敗します。具体的には
quit_if(strcmp(buffer, result[i]));
プログラムを実行したときの出力は、説明どおりです。しかし、freopen()
stdoutをファイルに転送してからそれを読み戻すまでの間に、それはどういうわけか変わっています。
Result:
cat:1
hat:0
batÿ:0
は出力になりますが、ファイルの書き込みと読み取りの前はそうではなく、何らかの理由で常にその奇妙なy文字です。
アドバイスをいただければ幸いです。これ以上コードを投稿しないことをお詫びしますが、それは学校のプロジェクトだからです。私のコードではなく、何らかの形で間違っているのはテストであると確信しています。テストの修正もプロジェクトの一部です。