Не возможно выйти из цикла c++

139
12 июля 2019, 05:10

Вот такой кусок кода:

fstream Results;
Results.open(path2, fstream::in | fstream::out | fstream::app);
if (!Results.is_open())
{
    cout << "Ошибка открытия файла" << n;
}
else
{
    int newM;
    char rE;
    int gresult = rarr[0] + rarr[1] + rarr[2];
    while (!Results.eof())
    {
        Results >> newM;
        if (newM == gresult)
        {
            Results >> rE;
            cout << rE << n;
            break;
        }
    }
}
Results.close();

Массив и путь, говорю сразу, правильные. Однако написанное в файле не выводится, но и не выдаёт ошибки. Проверка с помощью отладчика показала, что не выходит из цикла while. Пожалуйста , объясните почему.введите сюда код

Answer 1

В данном вопросе why is while feof file always wrong написано, что цикл вида:

while( !file.eof() )

почти всегда неверно. Вам следует поменять условие цикла на:

while ( Results >> newM ) {
  ....
}

Это не ошибка, но не имеет смысла создавать файловый поток без параметров и следующей же строкой открывать его, эти параметры можно просто передать в конструктор:

fstream Results(path2, fstream::in | fstream::out | fstream::app);
Answer 2

Скорее всего у вас не int в файле.

Ошибка чтения при неверном условии завершения приводит к тому, что вы пытаетесь читать какую-то ерунду - не целое число - вечно...

while (!Results.eof())
{
    Results >> newM;
    ...
}

Получается так:

Была попытка чтения за концом файла? Нет? Тогда читаем int. Не удалось? Остаемся на том же месте, выставляем состояние файла fail.
Идем к условию цикла. Была попытка чтения за концом файла? Нет? Тогда читаем int? нет, файл в состоянии fail.
Так что идем к условию цикла. Была попытка чтения за концом файла? Нет? Тогда читаем int? нет, файл в состоянии fail.
Так что идем к условию цикла. Была попытка чтения за концом файла? Нет? Тогда читаем int? нет, файл в состоянии fail. Так что идем...

READ ALSO
Не отображается часть кода из *.jsp в Tomcat

Не отображается часть кода из *.jsp в Tomcat

Использую IntelliJ IDEA Ultimate и Tomcat 9:

144
OneToMany связь Spring

OneToMany связь Spring

Имеется связь OneToMany, У одного Region есть много DistrictsИмеется простой REST контроллер, который возвращает все Region, но ответ приходит

136
бесконечный переворот матрицы на 90,-90,0 Java

бесконечный переворот матрицы на 90,-90,0 Java

Напишите программу, которая загружает матрицу и выполняет указанные преобразования указанного массива на 90, -90, 90 градусовПреобразования...

149
Добавление собственного Control в SceneBuilder (JavaFX)

Добавление собственного Control в SceneBuilder (JavaFX)

Можно ли добавить собственный элемент управления в SceneBuilder, что бы кроме стандартных (например TextField) в списке было MyTextField?

122