这甚至可能吗?
让我们说代码有很多scanf行。在调试时,不是手动运行和手动添加值,而是可以使用数据“输入”stdin,这样当scanf开始读取时,它将读取输入的数据,而无需与终端进行交互。
答案 0 :(得分:13)
将测试行放入文件中,然后运行如下程序:
myprogram < mytestlines.txt
比以某种方式破解你的程序更好。
在调试代码时,可以设置调试器以使用该命令行运行它。
答案 1 :(得分:4)
为了使您的程序更加通用,您可能需要考虑重写程序以使用fscanf
,fprintf
等,以便它可以处理文件IO而不仅仅是控制台IO ;那么当你想从stdin读取或写入stdout时,你只需按照以下方式做一些事情:
FILE *infile, *outfile;
if (use_console) {
infile = stdin;
outfile = stdout;
} else {
infile = fopen("intest.txt", "r");
outfile = fopen("output.txt", "w");
}
fscanf(infile, "%d", &x);
fprintf(outfile, "2*x is %d", 2*x);
因为程序经常只处理stdin / stdout并且不允许文件?特别是如果您最终在shell脚本中使用您的程序,则可以更明确地在命令行上指定输入和输出。
答案 2 :(得分:0)
int fd[2];
pipe(fd);
close(0); // 0:stdin
dup(fd[0], 0); // make read pipe be stdin
close(fd[0]);
fd[0] = 0;
write(fd[1], "some text", 9); // write "some text" to stdin