2017-09-06 84 views
-1

我想在字符串中获得几行输入到一个向量(或一个数组)。我使用getline()收集字符串,并且在收集完所有行后,我希望打破while循环。我试着用“if(line.empty)”然后中断,但它不起作用。我究竟做错了什么?中断getline循环C++

#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; 
} 
+0

顺便说一句,你不需要每次循环调用'line.empty'两次。你检查它是否不是空的。如果这是错误的,那么它一定是空的。将循环中的第二个“if”更改为“else”。可能不会解决你的问题,但应该指出。另外,***从不省略花括号***。如果误用,最终会咬你的是一种坏习惯。 – Carcigenicate

回答

0

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

#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