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
个调用。
我有一个用 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
个调用。