getline一直在等待标准输入

时间:2016-10-06 20:51:10

标签: c++ string getline istringstream

所以自从昨天以来我一直在讨论这个问题,我在这里检查了多个帖子试图解决这个问题,基本上,我试图从标准输入读取1行或更多行到字符串变量然后使用istringstream获取整数值。这就是我所拥有的:

string line;
int num;

while(getline(cin, line)){

    istringstream data(line);

    while(data >> num){

        do stuff...
    }
}

然而,外部循环永远不会退出,如果标准输入中没有输入它只是等待并且从未实际退出循环,所以程序基本上暂停直到输入某些内容,然后再继续循环。有人可以告诉我为什么getline不会在stdin上没有任何东西时导致退出条件,并且有人可以帮助我解决这个问题,非常感谢你的帮助。

2 个答案:

答案 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...
}