目前我有一个从标准输入读取数据的程序,有时候程序需要在没有输入时继续运行,通常这是一个测试脚本,没有所谓的“回车”。
program -v1 -v2 -v3 <input >output
v1 - v3 分别是命令行参数。
基本上,如果不给出“input”,该程序将输出命令行参数及其相应的含义,然后退出。
但是,如果给它一个空的测试文件或者只是在运行后不按回车键运行,它会阻塞在我用来输入命令的 std::getline 上。
while(std::getline(std::cin,foo)
{do stuff}
其中foo是一个字符串。
当没有输入时,如何让代码运行一次并退出?如果有输入,则执行操作
会对标准输入中的每一行都执行一次。
切换到使用do-while循环,是否可以在循环之前检查是否有任何输入?
类似这样:
if cin empty
set flag
do
{do stuff
check flag}
while(getline)
或者说在 C++ 中非阻塞 I/O 是不可能的吗?
这个问题似乎已经被反复提出,但我找不到一个明确的答案,甚至找不到一个平台无关的答案(这个程序是学术性质的,在 Windows 上编写并在 Unix 上测试)。