Символ читается дважды из ifstream [дубликата]

0

Я обнаружил странное поведение с std :: ifstream (или, скорее всего, я что-то упустил, как правильно его использовать). У меня есть следующая программа:

#include <iostream>
#include <fstream>

int main(int argc, char** argv) {

        std::ifstream file;
        file.open(argv[1]);

        while(not file.eof()) {
                int x;
                file >> x;
                std::cout << x << std::endl;
        }

        return 0;
}

Я называю это в файле, который содержит числа, разделенные пробелами, например:

1 34 567 3

Выходы программы:

1
34
567
3
3

Последний номер всегда дублируется. Я предполагаю, потому что он не достигает EOF после прочтения последнего номера, он достигает обязательных "\n" текстовых файлов, а следующий файл >> x возвращает мне последний номер чтения.

Как я могу правильно определить, что больше нет номера для чтения?

Теги:
ifstream

1 ответ

1
Лучший ответ

Пожалуйста попробуйте:

int x;
    while(file >> x;) {  
       std::cout << x << std::endl;
      }

Для лучшего понимания Пожалуйста, пройдите это.

Надеюсь, что это поможет вам.

Ещё вопросы

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