【问题标题】:Break in getline loop c++打破getline循环c ++
【发布时间】:2017-09-06 11:34:39
【问题描述】:

我想将字符串中的几行输入放入向量(或数组)中。我用 getline() 收集字符串,当收集完所有行后,我希望打破 while 循环。我尝试使用“if (line.empty)”然后中断,但它不起作用。我做错了什么?

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main()
{
    vector<string> lines;
    string line; 
    while (getline(cin >> ws, line))
    {
        if (!line.empty())
        {
            lines.push_back(line);
        }
        if (line.empty())
            break;
    }  
    cout << "Done";
 return 0;
}

【问题讨论】:

  • 顺便说一句,您不需要在每个循环中调用 line.empty 两次。你检查它是否不是空的。如果那是假的,那么它一定是空的。将循环中的第二个if 更改为else。可能不会解决您的问题,但应该指出。此外,永远不要省略花括号。如果使用不当,最终会咬你,这是一个坏习惯。

标签: c++ getline


【解决方案1】:

您可以尝试这样的事情,因为您正在尝试字符串,然后长度函数效果更好。代码去...

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main()
{
    vector<string> lines;
    string line; 
    while (getline(cin >> ws, line))
    {
      if (!line.length())
            break;
            lines.push_back(line);

    }  
    for(int i=0;i<lines.size();i++)cout<<lines[i]<<endl;
 return 0;
}

如果您在读取多个输入时遇到问题,请在循环开始时使用 cin>>ws(空格)。

输入

asds  as
dsaf asd 
asdasd dsa 
fadsa asd
fasd sad 
afdas asd

输出

asds  as
dsaf asd 
asdasd dsa 
fadsa asd
fasd sad 
afdas asd

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 2013-01-30
    • 1970-01-01
    • 2021-03-11
    • 2018-02-28
    • 2021-05-02
    相关资源
    最近更新 更多