Avatar ·

لماذا استخدام `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()` بشكل خاطئ؟ أم أن هذا خطأ في المترجم؟ اشرحوا لي، من فضلكم، ما الذي أفعله بشكل غير صحيح.