我正在用C编写程序,我正在尝试创建一个自动化测试程序。将产生一个进程,其I / O通道(stdin,stdout和stderr)将被重定向到“黑盒测试模块”。 让我们假设一个涉及两个数相乘的简单程序。在这种情况下,要测试的程序如下所示:
#include<stdio.h>
int main()
{
int a, b, numTc, i = 0; //numTc being the number of test cases
scanf("%d",&numTc);
for(;i < numTc; i++)
{
scanf("%d%d",&a,&b); //Facing issue here
printf("%d\n",a*b);
}
}
黑盒测试模块首先将此程序的I / O通道重定向到管道,然后使用write()
系统调用首先编写测试用例的数量,然后是测试用例本身。
我面临的问题是: 该过程挂在第二个scanf上,如上所示。如果我构造整个输入缓冲区并在追加“\ n”后将其写入管道,那么事情就可以了。
但是,我想逐个实现这个功能。
以下是黑匣子模块的逻辑:
以上工作正常。但是,黑匣子模块应该能够逐个编写测试用例。
答案 0 :(得分:2)
您是否正在尝试读取彼此相邻的两个单位数整数?如果是这样,您可以考虑使用%1d
。
有一个输入示例会很有帮助。
答案 1 :(得分:0)
您的问题很可能是管道的标准I / O行为与标准I / O到终端的行为不同。写入终端时默认为线路缓冲;写入管道时它是完全缓冲的。因此,您的程序需要fflush(stdout);
后printf()
实际向管道发送数据。
严格来说,您应该检查scanf()
的返回值,以确保获得预期效果。如果第一个scanf()
没有返回1或第二个没有返回2,那么你就会遇到问题。
您可以通过打开日志文件来查看正确读取的内容,从而调试问题。确保将输出刷新到该日志文件。