لديك خطأ في استخدام عامل الجداء (==
) بدلاً من عامل الاستقلال (=
) في عبارات تعيين قيم متغير char
. بدلاً من *cap == 'X';
و *cap == 'O';
يجب أن تكون العبارات *cap = 'X';
و *cap = 'O';
على التوالي.
التعديل الصحيح للدالة يبدو كما يلي:
cvoid takeTurn(int *iap, int *tile, char *cap) {
//*iap is 1 right now
printf("\nThe current active player is %d. His character is %c", *iap, *cap);
//prints The current active player is 1. His character is q.
if (*iap == 1) *cap = 'X';
if (*iap == 2) *cap = 'O';
printf("\nThe current active player is %d. His character is %c", *iap, *cap);
//prints The current active player is 1. His character is X.
. . .
}
بهذه الطريقة، سيتم تعيين قيمة المتغير char
المشار إليه بواسطة *cap
بشكل صحيح وفقًا للاعب النشط الحالي.
المزيد من المعلومات
الخطأ الذي قمت بتحديده في استخدام ==
بدلاً من =
هو خطأ شائع في لغات البرمجة مثل C و C++. في الحقيقة، يتم استخدام ==
للمقارنة بين القيم، بينما يتم استخدام =
للتعيين.
عندما تستخدم *cap == 'X';
، فإنك تحاول المقارنة بين قيمة المؤشر *cap
والقيمة 'X'
، وليس تعيين قيمة 'X'
للمؤشر *cap
. وبما أن قيمة المؤشر *cap
لا تتغير، فإن الشرط *cap == 'X'
سيعود دائمًا بقيمة خاطئة، ولن تتم عملية التعيين.
على العكس، عند استخدام *cap = 'X';
، يتم تعيين قيمة 'X'
مباشرة إلى المؤشر *cap
، مما يعني أن قيمة المؤشر تتغير بالفعل وتصبح 'X'
.