getline возвращает пустую строку

У меня проблемы с инструкцией getline от fstream. это фрагмент моего кода:


boolean_1=true;
while(true)
{
   if(boolean_1)
   {
      //some stuff
   }
   else
   {
        save_file.open("save.txt", fstream::in);
        //some stuff
        save_file.close();
   }

    mission_file.open(filename, fstream::in);
    mission_file.getline(buffer_line, 256);

    //some other stuff

    boolean_1=false;
    save_file.open("save.txt", fstream::out);
    //write something
    save_file.close();    
}

Этот код должен открывать файл mission_file при первом запуске и открывать файл сохранения на следующей итерации. Файл сохранения создается в конце каждого цикла. По крайней мере, так должно работать. Потому что в первый раз все работает без нареканий, но на следующей итерации "mission_file.getline (buffer_line, 256);" возвращает пустую строку, вызывая сбой программы. Кроме того, если boolean_1 начинается с false, цикл работает до следующего.

Я уже проверил наличие требуемых «.txt», оба параметра mission_file и save_file возвращают is_open () true.

1
задан Tibor 21 August 2010 в 09:01
поделиться

2 ответа

Невозможно увидеть из фрагментов кода, которые вы опубликовали, но похоже, что вы повторно используете один и тот же объект std :: fstream для каждого цикла.

Было бы проще создать новый локальный объект внутри цикла в точке, в которой вам нужно повторно открыть файл.

Если вам необходимо повторно использовать тот же объект fstream , чтобы открыть новый файл (или тот же файл в другой раз), вы должны обязательно очистить все флаги ошибок потока перед чтением из нового файла.

Выполнение очистки в какой-то момент перед первым чтением из нового файла должно сделать это.

mission_file.clear()
2
ответ дан 2 September 2019 в 21:56
поделиться

Вы убедитесь, что mission_file закрывается, потому что я не вижу mission_file.close () . Или вы просто пропустили эту строку во фрагменте кода здесь.

0
ответ дан 2 September 2019 в 21:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: