البرمجة

حل مشكلة تعيين قيم في مصفوفة ثنائية في لغة C

الخطأ الذي تواجهه يحدث لأنك تحاول تعيين قيمة لعنصر في جدول ثنائي من نوع char بقيمة نصية "YES" أو "NO"، وهذا لا يعمل في لغة C مباشرة بالطريقة التي تفعلها. في الواقع، عند قراءة القيمة "YES" أو "NO"، سيتم تفسيرها على أنها عنوان في الذاكرة (مؤشر)، وليس قيمة حرف.

بدلاً من ذلك، يمكنك استخدام الدالة strcpy لنسخ النص "YES" أو "NO" إلى جدول الأحرف c[a0]، وذلك بعد أن تأكدت من أن c[a0] لديه مساحة كافية لاستيعاب النص الذي تريد نسخه. يجب أن تتأكد من تضمين في بداية البرنامج لاستخدام دالة strcpy.

هناك أيضًا خطأ في طريقة طباعة القيم في النهاية، حيث يجب أن تكون c[p][4] تعود بقيمة الحرف المخزن في الموضع الرابع في كل صف c، وليس الحرف في الموضع الخامس. يجب تعديل ذلك إلى c[p][0] لطباعة الحرف الأول في كل صف.

إليك كيفية تصحيح الأخطاء:

c
#include #include int main() { int t; scanf("%d", &t); char c[t][4]; for(int a0 = 0; a0 < t; a0++) { int n; int k; scanf("%d %d", &n, &k); int a[n]; int count = 0; for(int a_i = 0; a_i < n; a_i++) { scanf("%d", &a[a_i]); if(a[a_i] <= 0) { count++; } } if(count >= k) { strcpy(c[a0], "NO"); } else { strcpy(c[a0], "YES"); } } for(int p = 0; p < t; p++) { printf("%c\n", c[p][0]); } return 0; }

هذا الكود يقوم بقراءة عدد الحالات t ثم يقوم بالتحقق من كل حالة وحساب عدد الأرقام السالبة أو الصفرية في كل حالة. بعد ذلك، يتم تخزين "YES" أو "NO" في الصف c[a0] حسب الشرط. في النهاية، يتم طباعة الحرف الأول من كل صف.

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

بالطبع! في الكود الذي كتبته، تقوم بتعريف مصفوفة ثنائية الأبعاد c من نوع char بحجم t في البعد الأول و 4 في البعد الثاني. ثم، تقوم بتكرار عملية القراءة والتحقق من الأرقام السالبة أو الصفرية وتخزين “YES” أو “NO” في كل صف من المصفوفة c بناءً على الشرط.

من الجيد أنك استخدمت strcpy لنسخ النصوص “YES” و “NO” إلى المصفوفة c بدلاً من محاولة تعيينها مباشرة. كما تم التعديل على الطريقة التي تقوم بها بطباعة النتائج.

لكن هناك بعض النقاط التي يجب مراعاتها:

  1. تأكد من تعريف المتغير count داخل الحلقة for الخارجية، لأنه يبدو أنه يجب إعادة تهيئته في كل دورة من الحلقة.
  2. تأكد من التأكد من أن c لديها مساحة كافية لتخزين النص “YES” أو “NO”. في هذه الحالة، يجب أن يكون الحجم الثاني لـ c هو 5 (بما في ذلك نهاية السلسلة المستنسخة).
  3. تحقق من قيمة t التي تم قراءتها من المدخل، وتأكد من أنها تمثل الحجم الصحيح للمصفوفة c.

إذا كنت بحاجة إلى أي مساعدة أو توضيح إضافي، فلا تتردد في طرح الأسئلة!

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