c/c++;为了重定向输出 我有一个C++的可执行文件,我在Windows ./p>中运行CMD.EXE。

c/c++;为了重定向输出 我有一个C++的可执行文件,我在Windows ./p>中运行CMD.EXE。,cmd,getchar,output-redirect,Cmd,Getchar,Output Redirect,当我运行此可执行文件并查看源代码时,我可以看到使用了getchar()函数-程序要求用户“单击任意键继续”,我可以看到调用了getchar(),因此程序将继续,直到用户单击任意键为止 我的问题是程序的输出太长,所以我想将其重定向到一个文件…(带有重定向字符) 因此,当我在cmd.exe中像这样运行exe时: prg > temp.txt 程序被卡住了,我想这是因为它等待输入(我试着点击任何键,但它不起作用) 当我运行程序而不将其重定向到文件时,只要在提示时按任意键,一切都正常 我本可以删

当我运行此可执行文件并查看源代码时,我可以看到使用了
getchar()
函数-程序要求用户“单击任意键继续”,我可以看到调用了
getchar()
,因此程序将继续,直到用户单击任意键为止

我的问题是程序的输出太长,所以我想将其重定向到一个文件…(带有重定向字符

因此,当我在cmd.exe中像这样运行exe时:

prg > temp.txt
程序被卡住了,我想这是因为它等待输入(我试着点击任何键,但它不起作用)

当我运行程序而不将其重定向到文件时,只要在提示时按任意键,一切都正常

我本可以删除所有的
getchar()
调用,但是我无法更改源代码,因为我没有所有资源来重新编译它


我的问题有解决办法吗?

getchar
通常使用缓冲输入。也就是说,从用户的角度来看,它不等待任何键,而是等待用户按Enter键

您应该为程序执行的每个
getchar
按一次Enter键。或者,当它第一次执行
getchar
(虽然您只能猜测它何时执行,因为没有提示),请输入一个长字符串:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
按Enter键后,随后的30次
getchar
调用将获得
a
,下一次调用将获得
\n
,下一次调用将挂起,等待更多输入(但不会出现提示)

另一种可能的方法是:将一些输入重定向到程序:

echo aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa | prg > temp.txt

确保您有足够的输入来满足所有
getchar
调用。

不确定Windows,但在Linux上,您可以通过管道将输入输入输入到程序中。正如4386427所述,在Linux上是“echo”k“| program>out_file”,在Windows中尝试类似的操作(我没有Windows atm)@Avra您确定它调用的是
getchar
而不是其他特定函数吗?我确定,它调用的是
getchar
。如果我理解正确,我仍然需要猜测第一个
getchar
是什么时候,然后按“回车”或只按“回车”indefinitely@Avra这就是为什么像
yes
这样的程序存在
yes'
将打印无限的换行符,并且可以在管道中使用:
yes'.\prg>temp.txt