Getline陷入无限循环

时间:2018-11-08 21:07:39

标签: c++

我运行以下代码段,希望当我按新行(Enter键)时,程序将暂停,但它不会这样做,知道是什么问题吗?谢谢。

#include <bits/stdc++.h>

using namespace std;

int main() {
    string s ;
    while(getline(cin ,s)){
        cout << s << endl ; 
    }
}

2 个答案:

答案 0 :(得分:1)

按Enter键可结束一行。如果该行上没有其他文本,则为空行,但仍为一行。

有两种方法可以解决此问题。

首先,根据您的操作系统,ctrl-D或ctrl-Z都将像文件结尾一样,并且对getline的调用将失败,从而结束循环。

第二,如果您希望空行结束循环,只需检查一下即可:

while (getline(cin, s) && s.length() != 0)
    std::cout << s << '\n';

答案 1 :(得分:0)

按Enter就像输入一个空行,您没有为退出程序设置任何条件。除非您强行退出它,否则它将保持无限。在while()中实现一个退出条件,以便当不满足该条件时,循环将退出,并且显然将getline()放入其中以继续询问输入提示。