所以自从昨天以来我一直在讨论这个问题,我在这里检查了多个帖子试图解决这个问题,基本上,我试图从标准输入读取1行或更多行到字符串变量然后使用istringstream获取整数值。这就是我所拥有的:
string line;
int num;
while(getline(cin, line)){
istringstream data(line);
while(data >> num){
do stuff...
}
}
然而,外部循环永远不会退出,如果标准输入中没有输入它只是等待并且从未实际退出循环,所以程序基本上暂停直到输入某些内容,然后再继续循环。有人可以告诉我为什么getline不会在stdin上没有任何东西时导致退出条件,并且有人可以帮助我解决这个问题,非常感谢你的帮助。
答案 0 :(得分:2)
如果标准输入中没有输入它只是在那里等待并且从未实际退出循环,所以程序基本上暂停直到输入某些内容,然后再继续循环。有人可以告诉我为什么getline不会在stdin上没有任何东西时导致退出状态
它只是按预期行事。什么是"实际上stdin" 什么都没有?你的意思是空输入吗?在这种情况下,您可能希望将循环条件更改为
while(getline(cin, line) && !line.empty()){
同样如注释中提到的 CTRL-Z 或 CTRL-D (取决于OS)后跟 ENTER 输入可能会结束循环
答案 1 :(得分:1)
问题是标准输入(cin)将读取一行,因为getline返回' true' (参考!= 0)循环将永远继续要求另一条线。
如果你想从输入中读取一行,你应该避免使用while:
string line;
int num;
getline(cin, line)){
istringstream data(line);
while(data >> num){
do stuff...
}