好的,我正在写一个C程序。程序很简单,当我运行程序时,我给它一些参数Ex ./proj1猫帽蝙蝠,所以它要求我输入一个单词列表,程序给出了多少次“猫”,“帽子” “和”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字符。
任何建议都将不胜感激。 很抱歉没有发布更多代码,但这是因为它是一个学校项目。 我确信这是在某种程度上错误的测试,而不是我的代码,修复测试也是项目的一部分。
答案 0 :(得分:2)
请参阅上一个问题的答案:
https://stackoverflow.com/a/4906442/2009431
似乎当从stdin文件中读回点时,它附加了一个EOF标记(有意义),通常不会成为用户输入的一部分。然后,不知何故(不确定,因为我们看不到你的代码)你的main()函数将这个EOF字符以怪异的y字符的形式附加到“bat”(有关原因的详细信息,请参阅链接的答案)。
如果我是对的,也许这可能被视为测试中的错误?