لماذا استخدام `while (!stream.eof())` في C++ هو خطأ؟
مرحبًا بالجميع! أنا مطور C++ مبتدئ، وواجهت مشكلة في قراءة الملفات. كتبت كودًا يجب أن يقرأ الأرقام من ملف نصي ويطبعها على الشاشة:
```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;
}
```
الملف `numbers.txt` يحتوي على: `10 20 30 40`. أتوقع أن يطبع البرنامج `10 20 30 40`، لكن بدلاً من ذلك يطبع `10 20 30 40 40`. أي أن الرقم الأخير يتكرر. جربت ملفات مختلفة، وتتكرر المشكلة — دائمًا تُضاف نسخة زائدة من العنصر الأخير. لماذا يحدث هذا؟ فأنا أتحقق من نهاية الملف قبل القراءة. هل أفهم عمل `eof()` بشكل خاطئ؟ أم أن هذا خطأ في المترجم؟ اشرحوا لي، من فضلكم، ما الذي أفعله بشكل غير صحيح.