我希望cin读到'\ n',但我不能使用getline

时间:2013-12-10 18:23:04

标签: c++ string io newline cin

我有一个以下格式的文本文件:

info
data1 data2
info
data1 data2 data3 data4...

问题是:数据的计数(和长度)可能非常大,并且在使用getline()时会导致运行时问题。所以我无法将整行读入std::string。我尝试了以下方法:

for(int i=0; i<SOME_CONSTANT ; i++){
    string info, data;

    cin >> info;

    while(cin.peek() != '\n' && cin >> data){
         // do stuff with data
    }
}

然而cin.peek()没有做到这一点。信息被读入while循环中的数据并且程序会混乱。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:7)

你可以尝试逐字逐句阅读。

char ch;
data = "";
cin >> std::noskipws;
while( cin >> ch && ch != '\n' ) {
  if ( ch == " " ) {
    // do stuff with data
    data = "";
    continue;
  }
  data += ch;
}
cin >> std::skipws;

答案 1 :(得分:3)

使用std::istream::getline代替std::getline。您可以选择缓冲区大小和分隔符。