البرمجة

قراءة وطباعة السلاسل من ملف نصي

المشكلة في الشفرة الحالية هي استدعاء دالة fgets() مرتين داخل الحلقة while دون استخدام القيمة المُرجعة من الدالة الأولى. هذا يؤدي إلى تخطي السطر الثاني والرابع في الملف. دعني أشرح لك كيفية حل هذه المشكلة.

عند استدعاء fgets() لأول مرة داخل الحلقة while، يتم قراءة السطر الأول من الملف وتخزينه في متغير name، ثم يتم طباعته. بعد ذلك، عند استدعاء fgets() مرة أخرى داخل الحلقة، يتم قراءة السطر التالي من الملف وتخزينه في name، ولكن هذه المرة لا يتم استخدام هذا السطر. بدلاً من ذلك، يتم قراءة السطر بعد السطر الذي تم قراءته وطباعته في الخطوة السابقة.

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

c
FILE *fp; char name[50]; fp = fopen("stu.txt", "r"); if (fp == NULL) { printf("Failed to open the file."); } else { while (fgets(name, 50, fp) != NULL) { printf("%s", name); } fclose(fp); }

هذه الشفرة الآن ستقرأ كل سطر من الملف وتطبعه بالترتيب الصحيح. قبل الحلقة while، تمت إضافة شرط للتحقق مما إذا كان فتح الملف ناجحًا أم لا، وإذا فشل فسيتم طباعة رسالة تنبيه.

المزيد من المعلومات

بالطبع، دعني أوضح المزيد من المعلومات بخصوص الشفرة المقدمة وكيفية قراءة السلاسل من الملف وطباعتها.

في الشفرة المقدمة، يتم استخدام دالة fopen() لفتح ملف نصي للقراءة بوضع “r”، والذي يعني أنه سيتم فتح الملف للقراءة فقط. يتم تخزين المؤشر الناتج عن fopen() في مؤشر نوعه FILE.

ثم، يتم استخدام حلقة while لقراءة السلاسل من الملف باستخدام دالة fgets(). هذه الدالة تقرأ سلسلة من الأحرف من الملف وتخزنها في المتغير name، وتتوقف عندما تصل إلى نهاية السطر أو عندما تصل إلى الحد الأقصى للأحرف المحدد في الدالة. إذا تمت قراءة السلسلة بنجاح، فإن fgets() تعيد المؤشر إلى السلسلة التالية في الملف. إذا وصلت إلى نهاية الملف، فإنها تعيد NULL.

داخل الحلقة، يتم طباعة السلسلة المقروءة باستخدام printf()، ثم يتم استدعاء fgets() مرة أخرى لقراءة السلسلة التالية. لكن في الشفرة الأصلية، تم استدعاء fgets() مرتين داخل الحلقة، مما تسبب في تخطي كل سطر ثاني في الملف.

أخيرًا، بعد الانتهاء من استخدام الملف، يتم إغلاقه باستخدام fclose() لتحرير أي موارد تم استخدامها لفتح الملف.

بهذه الطريقة، يمكنك قراءة السلاسل من ملف نصي وطباعتها بشكل صحيح باستخدام الشفرة المقدمة، مع التأكد من أن تقوم بالتعامل بشكل صحيح مع نتائج دوال المكتبة المستخدمة.

زر الذهاب إلى الأعلى