我希望 cin 读取直到'n'但我无法使用 getline

I want cin to read until ' ' but I cannot use getline

本文关键字:getline 读取 cin 我希望      更新时间:2023-10-16

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

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循环中被读取到数据中,程序会把事情搞砸。我该怎么解决这个问题?

您可以尝试逐字符读取。

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

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