Por que usar `while (!stream.eof())` em C++ é um erro?
Olá a todos! Sou um desenvolvedor C++ iniciante e tive um problema com leitura de arquivos. Escrevi um código que deveria ler números de um arquivo de texto e exibi-los na tela:
```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;
}
```
O arquivo `numbers.txt` contém: `10 20 30 40`. Eu esperava que o programa exibisse `10 20 30 40`, mas em vez disso ele exibe `10 20 30 40 40`. Ou seja, o último número é duplicado. Tentei com diferentes arquivos, e o problema se repete — sempre uma cópia extra do último elemento é adicionada. Por que isso acontece? Afinal, estou verificando o fim do arquivo antes de ler. Será que estou entendendo errado como `eof()` funciona? Ou é um bug do compilador? Expliquem, por favor, o que estou fazendo de errado.