الخطأ الذي تواجهه يحدث لأنك تحاول تعيين قيمة لعنصر في جدول ثنائي من نوع char
بقيمة نصية "YES"
أو "NO"
، وهذا لا يعمل في لغة C مباشرة بالطريقة التي تفعلها. في الواقع، عند قراءة القيمة "YES"
أو "NO"
، سيتم تفسيرها على أنها عنوان في الذاكرة (مؤشر)، وليس قيمة حرف.
بدلاً من ذلك، يمكنك استخدام الدالة strcpy
لنسخ النص "YES"
أو "NO"
إلى جدول الأحرف c[a0]
، وذلك بعد أن تأكدت من أن c[a0]
لديه مساحة كافية لاستيعاب النص الذي تريد نسخه. يجب أن تتأكد من تضمين
في بداية البرنامج لاستخدام دالة strcpy
.
-
فهم عميق لإدارة حزم NuGet في .Net Core05/02/2024
-
تحويل بيانات العمود إلى أعمدة في R23/03/2024
-
فرز بيانات بواسطة الاسم الأول.07/04/2024
هناك أيضًا خطأ في طريقة طباعة القيم في النهاية، حيث يجب أن تكون 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
بدلاً من محاولة تعيينها مباشرة. كما تم التعديل على الطريقة التي تقوم بها بطباعة النتائج.
لكن هناك بعض النقاط التي يجب مراعاتها:
- تأكد من تعريف المتغير
count
داخل الحلقةfor
الخارجية، لأنه يبدو أنه يجب إعادة تهيئته في كل دورة من الحلقة. - تأكد من التأكد من أن
c
لديها مساحة كافية لتخزين النص “YES” أو “NO”. في هذه الحالة، يجب أن يكون الحجم الثاني لـc
هو5
(بما في ذلك نهاية السلسلة المستنسخة). - تحقق من قيمة
t
التي تم قراءتها من المدخل، وتأكد من أنها تمثل الحجم الصحيح للمصفوفةc
.
إذا كنت بحاجة إلى أي مساعدة أو توضيح إضافي، فلا تتردد في طرح الأسئلة!