【发布时间】:2017-12-14 11:26:40
【问题描述】:
我有一个一般形式的函数
void readStuff(std::istream& input){
int var;
while(input>>var){
//... do stuff
}
}
输入作为 std::cin 或 std::ifstream 传递,取决于是否设置了命令行选项 -c。从文件中读取
myprog file.txt
工作正常。如果使用 std::cin,则
cat file.txt | myprog -c
效果也很好。但是,如果用户尝试,它会挂起
myprog -c
如何在我的代码中处理这种情况?我试过检查 ifstream 的标志,但在所有情况下它们都是 0,除了 ifstream.good()。
【问题讨论】:
-
它没有挂;它只是在等待输入。
-
嗯,是的,但不会有任何......
-
这是所有命令的正常行为。尝试在您的终端上只执行
cat,您会看到它会等待输入,直到您发送 EOF。 -
所以没有办法在我的代码中做到这一点?
-
您可以使用isatty 来检查您的程序是否通过管道传输或正在从终端读取输入。