Avatar ·

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.