【发布时间】:2017-02-15 18:06:13
【问题描述】:
所以我从昨天开始就一直在努力解决这个问题,我检查了这里的多个帖子试图弄清楚这一点,基本上,我试图从标准输入中读取 1 行或更多行到一个字符串变量中然后使用 istringstream 获取整数值。这就是我所拥有的:
string line;
int num;
while(getline(cin, line)){
istringstream data(line);
while(data >> num){
do stuff...
}
}
但是,外部循环永远不会退出,如果标准输入中没有输入,它只会坐在那里等待并且永远不会真正退出循环,因此程序基本上会暂停,直到输入某些内容,然后再次继续循环.有人可以告诉我为什么 getline 在 stdin 上没有任何内容时不仅会导致退出条件,并且有人可以帮助我解决此问题,我们将不胜感激。
【问题讨论】:
-
水是湿的,天空是蓝色的原因是一样的:当从标准输入读取时,默认情况下,来自终端控制台,如果没有可用的输入,程序会暂停并等待直到输入输入。这就是 C++ 的工作原理。
-
@SamVarshavchik 是的,但是如果没有更多输入,getline 是否应该导致 while 条件评估为 false?如果没有,那我怎么能做到这一点?
-
@Kakarot 如果您从文件中提供数据(重定向标准输入),它应该终止。
-
getline()将在错误或文件结束条件下评估 false。由 CTRL-Z 或 CTRL-D 为交互式终端输入指定文件结束条件,具体取决于操作系统。
标签: c++ string getline istringstream