Цикл, который вы написали, явно неверен: вы тестируете eof()
до сбоя и не тестируете на сбой после getline
.C ++ ввод / вывод не является прогнозирующим.(Не могу, потому что то, что вы находитесь на eof()
, будет зависеть от того, что вы пытаетесь прочитать.) Правильный шаблон будет таким:
while ( i < size(str) && getline( readSWDS, str[i] ) ) {
if ( !str[i].empty() ) {
++ i;
}
Обратите внимание, что я добавил тест дляi
.Как написано, если ваш файл содержит более 200 строк, у вас большие проблемы.
Однако я не уверен, что это ваша проблема;цикл, который вы написали, обычно вызывает проблемы только в последней строке.(Как правило, если последняя строка заканчивается '\n'
и не является пустой, она появится в вашем массиве дважды.) Если, конечно, ваш файл не содержит более 200 строк.
Я мог быдобавьте, что еще более типичной идиомой было бы сделать str
std::vector<std::string>
, и написать цикл:
std::string line;
while ( std::getline( readSWDS, line ) ) {
if ( !line.empty() ) {
str.push_back(line);
}
}
Это позволяет избежать определения фиксированного максимального числа строк.