Avatar ·

Por qué usar `while (!stream.eof())` en C++ es un error

¡Hola a todos! Soy un desarrollador principiante de C++ y tuve un problema con la lectura de archivos. Escribí un código que debería leer números de un archivo de texto y mostrarlos en pantalla: ```cpp #include #include #include int main() { std::ifstream file("numbers.txt"); std::vector numbers; int value; while (!file.eof()) { file >> value; numbers.push_back(value); } for (int n : numbers) { std::cout << n << " "; } return 0; } ``` El archivo `numbers.txt` contiene: `10 20 30 40`. Espero que el programa imprima `10 20 30 40`, pero en su lugar imprime `10 20 30 40 40`. Es decir, el último número se duplica. Probé con diferentes archivos y el problema se repite: siempre se agrega una copia extra del último elemento. ¿Por qué sucede esto? Si estoy verificando el final del archivo antes de leer. ¿Acaso no entiendo bien cómo funciona `eof()`? ¿O es un bug del compilador? Expliquen, por favor, qué estoy haciendo mal.