Getline一直等待标准输入

getline keeps waiting on standart input

本文关键字:标准输入 一直等待 Getline      更新时间:2023-10-16

所以我一直在扯我的头发从昨天开始,我已经检查了多个帖子在这里试图弄清楚这一点,基本上,我试图从标准输入读取1或更多行到字符串变量,然后使用istringstream来获得整数值。这是我的:

string line;
int num;
while(getline(cin, line)){
    istringstream data(line);
    while(data >> num){
        do stuff...
    }
}

然而,外部循环永远不会退出,如果标准输入中没有输入,它只是坐在那里等待,永远不会真正退出循环,所以程序基本上暂停,直到输入一些东西,然后再次继续循环。有人能告诉我为什么getline不只是导致退出条件时没有stdin,有人能帮助我解决这个问题,你的帮助将非常感激。

如果在标准输入中没有输入,它只是坐在那里等待,永远不会真正退出循环,所以程序基本上暂停,直到输入一些东西,然后再次继续循环。有人能告诉我为什么当stdin

上没有任何内容时,getline不只是导致退出条件吗?

它的行为就像预期的那样。"nothing on stdin"到底是什么?你是说一个空输入吗?在这种情况下,您可能需要将循环条件更改为

while(getline(cin, line) && !line.empty()){

也正如在注释中提到的CTRL-ZCTRL-D(取决于操作系统)后面跟着ENTER输入可能会结束循环

问题是标准输入(cin)将读取一行,并且由于getline返回'true'(引用!= 0),循环将永远继续请求另一行。

如果你想从输入中读取一行,你应该避免使用while:

string line;
int num;
getline(cin, line)){
istringstream data(line);
while(data >> num){
    do stuff...
}