Я хочу, чтобы cin читал до "n", но я не могу использовать getline

у меня есть текстовый файл в следующем формате:

info
data1 data2
info
data1 data2 data3 data4...

проблема в том, что количество (и длина) данных может быть очень большим и вызывать проблемы во время выполнения, когда есть. Поэтому я не могу прочитать всю строку в 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 ответов


вы можете попробовать читать Символ за символом.

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. Вы можете выбрать размер буфера и разделитель.