البرمجة

تحديث وإصلاح أخطاء برنامج C

بدايةً، يبدو أنك تعمل على برنامج C لقراءة بيانات من ملف نصي ومعالجتها، ثم كتابة النتائج في ملف آخر. عند محاولة تشغيل البرنامج، تواجهك رسالة خطأ تفيد بأن هناك مشكلة في العملية الثنائية ‘&’ حيث يتم استخدامها بين ‘int *’ و ‘int’، وهذا يوحي بأن هناك خطأ في الطريقة التي تقوم بها بالإشارة إلى المتغيرات في دالة fscanf.

المشكلة الأساسية تكمن في أنه نسيت وضع فواصل بين المتغيرات المطلوبة لدالة fscanf، مما جعل البرنامج يفهمها على أنها عمليات ثنائية. هذا الخطأ يمكن أن يكون سبباً في رسالة الخطأ التي تتلقاها.

هناك أيضًا بعض التعديلات الأخرى التي يجب إجراؤها في الكود لجعله يعمل بشكل صحيح. فيما يلي إصلاحات للكود:

  1. يجب وضع فواصل بين المتغيرات في دالة fscanf لتفادي الخطأ الذي واجهته.
  2. يُفضل استخدام int main() بدلاً من main() لأسباب تتعلق بمعايير البرمجة والتوافق.
  3. يُفضل استخدام fclose لإغلاق الملفات بعد الانتهاء من استخدامها لتفادي تسريب الموارد.

إليك الكود بعد إجراء التعديلات:

c
#include #include int main() { FILE *infile; FILE *prnt; int num1, num2, nums; char complex; float fcost; char name[11]; infile = fopen("F:/DATA.txt", "r"); prnt = fopen("F:/income.txt", "w"); if (infile == NULL || prnt == NULL) { printf("FILE NOT FOUND\n"); system("pause"); return 1; } fprintf(prnt, "%-15s %-23s %6s\n\n", "ABAHLMAN", "Program 1", "PAGE 1"); fprintf(prnt, "\n"); while (fscanf(infile, " %i %i %i %f %c", &nums, &num1, &num2, &fcost, &complex) != EOF) { int area = (nums * 200) + (num1 * 300) + (num2 * 450); float cost = fcost + (area * 75.00); double income = 12 * ((nums * 450) + (num1 * 550) + (num2 * 700)); float payback = cost / income; fprintf(prnt, "%-10s %5f %7c %9.2f\n", name, payback, complex, cost); } fclose(infile); fclose(prnt); return 0; }

قمت بإجراء التعديلات الضرورية وتصحيح الأخطاء المذكورة، والآن يجب أن يعمل البرنامج بشكل صحيح دون وجود الخطأ الذي واجهته. تأكد من وجود ملف البيانات “DATA.txt” في المسار الصحيح وأن لديك صلاحيات الوصول اللازمة لقراءته.

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

بالطبع، دعنا نكمل المقال بشكل شامل:

عندما يتعلق الأمر ببرمجة برنامج في لغة C، يمكن أن تكون تجارب التصحيح جزءًا أساسيًا من العملية. في مثالك، واجهت مشكلة تتعلق بإجراء عملية ثنائية بين متغيرات مختلفة الأنواع، وهو ما أدى إلى ظهور رسالة الخطأ التي ذكرتها.

حل المشكلة كان بسيطًا نسبيًا بعد تحديد موقع الخطأ. تمثلت الخطوة الأولى في فحص الشفرة وتحديد السطر الذي ظهرت فيه المشكلة. بعد ذلك، تم تصحيح الخطأ بإدراج فواصل بين المتغيرات في دالة fscanf.

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

كما تم تعديل الدالة main لتكون int main() وليس فقط main()، وهذا يتوافق مع معايير البرمجة القياسية ويسمح بإرجاع قيمة للنظام بناءً على نجاح أو فشل التنفيذ.

أخيرًا، بعد معالجة البيانات وإجراء الحسابات اللازمة، يجب إغلاق الملفات المفتوحة باستخدام دالة fclose لتجنب تسريب الموارد وضمان حفظ البيانات بشكل صحيح.

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

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