سؤال

على سؤال آخر, جيري كوفين أشار ما يلي:

إنه (ربما) لا يرتبط حقًا بسؤالك ، ولكن while (!feof(fileptr)){ هو إلى حد كبير خطأ مضمون.

اعتقدت أنني سأبدأ سؤالًا منفصلاً لأن هذا التعليق غير موصل إلى حد ما. هل يستطيع احد ان يشرح هذا لي؟ كان هذا هو البرنامج الأول الذي كتبته في مستقيم C من قبل.

هل كانت مفيدة؟

المحلول

سبب هذا البيان هو ذلك feof لا يزال (في البداية) خطأ عند الوصول إلى نهاية الملف - يصبح صحيحًا فقط بعد أول محاولة فاشلة لقراءة نهاية الملف.

بالتالي

char mychar;
while(!feof(fileptr))
{
    fread(&mychar, sizeof(char), 1, fileptr);
    fprintf(stderr, "The char is '%c'.\n", mychar);
}

سوف يعالج شار واحد أكثر من اللازم.

الطريقة الصحيحة هي التحقق من قيمة الإرجاع fread (أو أي وظيفة تستخدمها لقراءتها) أو بدلاً من ذلك للاتصال feof بعد، بعدما الوظيفة التي تفعل القراءة. فمثلا:

char mychar;
while(fread(&mychar, sizeof(char), 1, fileptr) > 0)
    fprintf(stderr, "The char is '%c'.\n", mychar);

نصائح أخرى

تجد Google هذا: http://www.drpaulcarter.com/cs/common-c-errors.php#4.2

تقول "لم ير المؤلف بعد أي طالب يستخدم وظيفة FEOF () بشكل صحيح!"

لتلخيص ، وظائف ملف C مثل fread و fwrite إرجاع قيم الحالة على أي حال أنت u003Cblink>لا ينبغي تجاهلu003C/blink>. التحقق من قيمة feof هو واحد من أولئك الذين يقومون بتجميع الباب المستقر بعد أن هرب الحصان بالفعل من الأشياء.

تحتوي قائمة الأسئلة الشائعة C إجابه جنبا إلى جنب مع إجابات للعديد من الأسئلة الأخرى التي يتم طرحها بشكل متكرر:

في C ، تتم الإشارة إلى نهاية الملف فقط بعد أن حاول روتين الإدخال القراءة ، وفشل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top