c/c++ 中的 getchar() 解决方法以重定向输出

getchar() workaround in c/c++ in order to redirect output

我有一个用 C++ 编写的可执行文件,我 运行 它在 Windowscmd.exe

当我 运行 这个可执行文件并通过查看源代码时,我可以看到使用了 getchar() 函数 - 程序要求用户 "click any key to continue" 和我可以看到 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 个调用。