【问题标题】:exiting out of a loop using getline when you encounter a newline character遇到换行符时使用 getline 退出循环
【发布时间】:2020-11-21 12:22:19
【问题描述】:

这可能是最基本的问题,但我在使用 getline 退出循环时遇到问题。假设用户在控制台中使用 std::cin 输入这些单词:

/*
word
word_one
word_two

word_three
word_four
*/

假设我们已经定义了一个由字符串向量组成的空向量vector< vector<string> >。此特定输入所需的vector< vector<string> > 必须是:< <word, word_one, word_two>, <word_three, word_four> >。 我的以下代码是:

int main(){
    vector< vector<string> > vv;
    vector<string> v;
    string line;
    while(getline(cin, line)){
        if(line == "\n"){
            vv.push_back(v);
            break;
        }
        else{v.push_back(line);}
    }
    return 0;
}

有什么帮助吗?感觉好像 if 语句没有检测到“\n”。它只是无休止地继续下去。 (另外,不要担心包含和命名空间)

【问题讨论】:

    标签: c++


    【解决方案1】:

    问题是您正在检查“\n”,而您必须检查“”。这是因为getline 没有复制“\n”字符,所以会是一个空字符串。

    using namespace std;
    
    int main(){
        vector< vector<string> > vv;
        vector<string> v;
        string line;
        while(getline(cin, line)){
            if(line == ""){
                cout<<line;
                vv.push_back(v);
                break;
            }
            else v.push_back(line);
        }
        return 0;
    }
    

    【讨论】:

      【解决方案2】:

      是的,if 条件永远不会执行,因为getline 会丢弃行尾字符。

      http://www.cplusplus.com/reference/string/string/getline/

      空行将产生一个空字符串,而不是包含 '\n' 的字符串。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-05
        • 2019-08-18
        • 2016-07-06
        • 1970-01-01
        • 2012-08-02
        • 2023-03-08
        • 2012-07-06
        • 2017-12-28
        相关资源
        最近更新 更多