4

这甚至可能吗?

可以说代码有很多 scanf 行。不是在调试时手动运行和手动添加值,而是可以向标准输入“馈送”数据,以便当 scanf 开始读取时,它将读取输入的数据而无需与终端交互。

4

3 回答 3

13

将测试行放入文件中,然后像这样运行程序:

myprogram < mytestlines.txt

比破解你的程序以某种方式自己做到这一点要好。

在调试代码时,您可以设置调试器以使用该命令行运行它。

于 2009-07-05T13:17:10.583 回答
5

为了使您的程序更加通用,您可能需要考虑重写您的程序以使用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 脚本中使用您的程序,在命令行上指定输入和输出会更加明确。

于 2009-07-05T13:35:28.080 回答
1
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
于 2012-10-26T06:15:16.270 回答