في هذا الشيفرة، يظهر أن لديك حلقة تكرار تحاول فحص الأحرف في مصفوفة word
، وتقوم بزيادة عداد counter
عندما يكون الحرف الحالي مختلفًا عن ‘\0’. ومع ذلك، يبدو أن هناك خطأ في شرط الحلقة الذي يجعلها تنتهي فورًا بعد أول تنفيذ.
في الحقيقة، يجب أن يكون شرط الحلقة c != '\0'
بدلاً من c == '\0'
، حيث أنك تريد أن تستمر في التكرار حتى تصل إلى نهاية النص ('\0'
). وفي الشرط الحالي، الحلقة لا تنفذ أبدًا لأن الشرط غير صحيح منذ البداية.
إليك الشيفرة بتصحيح الشرط:
c#include
int main() {
char word[10];
word[0] = 'a';
word[1] = 'b';
word[2] = 'c';
word[3] = '\0';
char* ptr = word;
int x = 0;
int counter = 0;
for (char c = *(ptr + x); c != '\0'; c = *(ptr + x)) {
counter++;
x++;
}
printf("Counter: %d\n", counter);
return 0;
}
بعد تصحيح الشرط، يجب أن يعمل البرنامج كما هو متوقع، وستكون قيمة counter
هي 3، لأن هناك ثلاثة أحرف في المصفوفة word
قبل النهاية المعلنة بواسطة '\0'
.
المزيد من المعلومات
الشيفرة التي قدمتها تظهر محاولتك لاستخدام حلقة for
لفحص الأحرف في مصفوفة word
وزيادة العداد counter
لكل حرف غير مساوٍ ل '\0'
. لكن دعني أوضح بعض المعلومات الإضافية حول الشيفرة.
أولاً، قمت بتعريف مصفوفة word
من نوع char
وقمت بتعبئتها بثلاثة أحرف: ‘a’، ‘b’، و ‘c’، وقمت بإضافة ‘\0’ في نهاية المصفوفة للإشارة إلى نهاية النص.
ثم، قمت بتعريف مؤشر ptr
وجعلته يشير إلى بداية المصفوفة word
. وأيضا، قمت بتعريف متغيرات x
و counter
، حيث يستخدم x
كمؤشر للتحكم في موقع الحرف الحالي الذي تتم مقارنته في الحلقة، و counter
يستخدم لحساب عدد الأحرف غير '\0'
.
وهناك خطأ في شرط الحلقة الذي أصلحناه ليكون c != '\0'
بدلاً من c == '\0'
. هذا التصحيح يجعل الحلقة تستمر في التكرار حتى تصل إلى نهاية النص المشير إليها بواسطة '\0'
.
بعد تصحيح الشرط، ستتم الزيادة في counter
بكل تكرار حتى تنتهي الحلقة، وبناءً على المحتوى الحالي لمصفوفة word
، ستكون قيمة counter
هي 3.
هذا يشير إلى أن هناك ثلاثة أحرف في المصفوفة قبل نهاية النص المشيرة إليها ب '\0'
.