C / C ++从程序中向stdin添加输入?

时间:2009-07-05 13:15:50

标签: c++ c input stdin

这甚至可能吗?

让我们说代码有很多scanf行。在调试时,不是手动运行和手动添加值,而是可以使用数据“输入”stdin,这样当scanf开始读取时,它将读取输入的数据,而无需与终端进行交互。

3 个答案:

答案 0 :(得分:13)

将测试行放入文件中,然后运行如下程序:

myprogram < mytestlines.txt

比以某种方式破解你的程序更好。

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

答案 1 :(得分:4)

为了使您的程序更加通用,您可能需要考虑重写程序以使用fscanffprintf等,以便它可以处理文件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