Почему ifstream дважды возвращает последнее значение входных файлов? [Дубликат]

0

Почему ifstream возвращает последнее значение строк дважды?

в

size_t c;
    while (1){
        myfile >> c;
        cells.push_back(c);
        if (myfile.eof()) break;
    }
    for (int i = 0; i < cells.size(); i++) cout << cells[i] << endl;

с вводом

    2   3
    9   7   11
    12  5   6
    3   4

клетки [7] = клетки [8] = 4

Я сделал это с несколькими аналогично отформатированными входами, и он делает это для всех.

Теги:
ifstream

2 ответа

3

Идиоматический способ сделать это

while (myfile >> c){

}

Это полностью устраняет вашу проблему, так как eof() не достигается при чтении последнего значения, но когда поток не читается, поэтому после этого вы выполните другой push_back. Преимущество вышеприведенного в то время как конструкция заключается в том, что он немедленно сломается при сбое.

0

Вы всегда должны проверять результат операции ввода-вывода, прежде чем использовать возвращаемые данные.

В этом случае ваша проверка на eof() должна предшествовать вызову push_back(). Чтобы сделать код более безопасным, вы также должны добавить проверку для fail() в потоке, так как поток может выйти из строя по другим причинам, кроме достижения EOF.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню