getline возвращает пустую строку - PullRequest
1 голос
/ 21 августа 2010

У меня проблемы с инструкцией 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.

Ответы [ 2 ]

2 голосов
/ 21 августа 2010

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

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

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

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

mission_file.clear()
0 голосов
/ 21 августа 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...