这甚至可能吗?
可以说代码有很多 scanf 行。不是在调试时手动运行和手动添加值,而是可以向标准输入“馈送”数据,以便当 scanf 开始读取时,它将读取输入的数据而无需与终端交互。
将测试行放入文件中,然后像这样运行程序:
myprogram < mytestlines.txt
比破解你的程序以某种方式自己做到这一点要好。
在调试代码时,您可以设置调试器以使用该命令行运行它。
为了使您的程序更加通用,您可能需要考虑重写您的程序以使用fscanf
,fprintf
等,以便它已经可以处理文件 IO 而不是控制台 IO;那么当您想从标准输入读取或写入标准输出时,您只需执行以下操作:
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);
因为程序多久只处理标准输入/标准输出而不允许文件?特别是如果您最终在 shell 脚本中使用您的程序,在命令行上指定输入和输出会更加明确。
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