0

さて、私は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文字です。

アドバイスをいただければ幸いです。これ以上コードを投稿しないことをお詫びしますが、それは学校のプロジェクトだからです。私のコードではなく、何らかの形で間違っているのはテストであると確信しています。テストの修正もプロジェクトの一部です。

4

1 に答える 1

2

前の質問に対するこの回答を参照してください。

https://stackoverflow.com/a/4906442/2009431

ドットがstdinファイルから読み戻されると、通常はユーザーの入力の一部ではないEOFトークンが追加されているようです(意味があります)。次に、どういうわけか(コードが表示されないためわかりません)、main()関数はそのEOF文字をその奇妙なy文字の形式で「bat」に追加しています(理由の詳細については、リンクされた回答を参照してください)。

私が正しければ、これはテストのバグと見なされる可能性がありますか?

于 2013-02-01T22:30:24.143 に答える