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.