【发布时间】:2013-05-11 15:17:09
【问题描述】:
目前我有一个从标准输入读取的程序,有时如果没有输入,程序需要继续运行,通常这是一个测试脚本,可以说没有“输入”。
program -v1 -v2 -v3 <input >output
v1 - v3 分别是命令行参数
如果没有给出“输入”,基本上程序会向程序吐出命令行参数及其各自的含义,然后应该退出。
但是,目前如果给它一个空的测试文件,或者在我用来输入命令的 std::getline 上运行它后不按回车键就运行它。
while(std::getline(std::cin,foo)
{do stuff}
其中 foo 是一个字符串。
如何让它运行并至少运行一次do stuff,然后在没有输入的情况下退出?在输入事件中,do stuff 在标准输入中的每一行出现一次。
切换到 do-while 循环并检查预循环是否有任何输入是否可行?
类似
if cin empty
set flag
do
{do stuff
check flag}
while(getline)
或者c++中不能实现非阻塞io?
这个问题似乎一遍又一遍地重复,但我找不到明确的答案,甚至找不到与平台无关的答案(这个程序本质上是学术性的,在 windows 上编码并在 unix 上测试)。
【问题讨论】:
-
所以你是说无论如何你都希望循环运行一次,然后如果在 getline 调用之前没有输入就退出?
-
checking data availability before calling std::getline 的可能副本 不幸的是,在标准 C++ 中可能没有可移植的方式来执行此操作。
-
你能使用 C 中的一些低级函数吗?