Я обнаружил странное поведение с 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 возвращает мне последний номер чтения.
Как я могу правильно определить, что больше нет номера для чтения?
Пожалуйста попробуйте:
int x;
while(file >> x;) {
std::cout << x << std::endl;
}
Для лучшего понимания Пожалуйста, пройдите это.
Надеюсь, что это поможет вам.