ifstream — чтение от конкретной заливки до последней строки в переполнении стека

У меня есть текстовый файл с множеством строк. Я хочу хранить каждую строку в векторе строк. Я хочу читать из файла, пока не будет достигнута последняя строка. Я использовал функцию EOF, но, похоже, она хранит пустые строки после последней строки. Вот фрагмент моего кода. text_list — это вектор, в котором хранятся все строки файла.

void TextBuddy::storeDataFromFileInVector(string filename){
ifstream infile;
int numbers;
string textMessage;
infile.open(filename);

while (!infile.eof()){
getline(infile, textMessage);
text_list.push_back(textMessage);
}
infile.close();
}

0

Решение

eof () не смотрит в будущее. Таким образом, когда вы находитесь прямо перед EOF, вы также прочитаете это в свой вектор и, возможно, испортите его.

Лучший способ прочитать все строки в векторе:

string line;
while(getline(inFile, line)
text_list.push_back(line);

Ваш цикл прервется, как только вы прочитаете EOF или произойдет любая другая ошибка.

Другой метод использует итераторы и библиотеку алгоритмов:

copy(istream_iterator<string>(inFile), istream_iterator<string>(),
back_inserter(text_list));

Это зависит от вас, какой вы предпочитаете.

2

Другие решения

Пустые строки, множественное число? Вы должны проверить, достигло ли оно EOF, прежде чем нажать на список.

infile.open( filename );

getline( infile, textMessage );
while( !infile.eof() )
{
text_list.push_back( textMessage );
getline( infile, textMessage );
}

редактировать: ответ KasF лучше.

0

По вопросам рекламы [email protected]