تخطَّ إلى المحتوى

الشروط في C: if و switch

الدرس 3 من 10 · C

البرنامج الذي ينفّذ نفس الأوامر دائماً محدود جداً. القوة الحقيقية تأتي عندما يقرر: إذا كانت الحرارة مرتفعة شغّل المروحة، وإذا كان الرصيد غير كافٍ ارفض العملية. في هذا الدرس ستتعلم الشروط في C، وستكتشف شيئاً مميزاً فيها: C لا تعرف «صح» و«خطأ» كقيم مستقلة، بل كأرقام!

int score = 72;
if (score >= 90) {
printf("ممتاز\n");
} else if (score >= 50) {
printf("ناجح\n");
} else {
printf("راسب\n");
}
الناتج
ناجح

C تفحص الشروط من الأعلى، وتنفّذ أول فرع صحيح فقط.

عوامل المقارنة: == و != و > و < و >= و <=. العوامل المنطقية: && (و)، و || (أو)، و ! (ليس).

#include <stdbool.h>
int age = 16;
bool hasTicket = true;
if (age >= 13 && hasTicket) {
printf("تفضل بالدخول\n");
}
الناتج
تفضل بالدخول

النوع bool والقيمتان true و false تحتاج سطر #include <stdbool.h> في الإصدارات المعتادة من C.

في C، أي رقم صفر يعني «خطأ»، وأي رقم غير الصفر يعني «صح»:

int x = 0;
if (x) printf("صحيح\n"); else printf("خطأ\n");
x = 5;
if (x) printf("صحيح\n"); else printf("خطأ\n");
printf("%d %d\n", 5 > 3, 5 < 3);
الناتج
خطأ
صحيح
1 0

لاحظ السطر الأخير: نتيجة المقارنة نفسها رقم، 1 للصح و 0 للخطأ. وفي الحقيقة true في stdbool.h ما هي إلا الرقم 1، و false هي 0.

عندما تقارن متغيراً واحداً بعدة قيم ثابتة:

int day = 5;
switch (day) {
case 5:
case 6:
printf("عطلة نهاية الأسبوع\n");
break;
case 7:
printf("أول أيام الدراسة\n");
break;
default:
printf("يوم دراسي عادي\n");
}
الناتج
عطلة نهاية الأسبوع
  • case يتبعه قيمة ثابتة ثم نقطتان.
  • break تُنهي switch بعد تنفيذ الحالة.
  • default لكل قيمة لم تُذكر.
  • كتابة case 5: و case 6: متتاليتين بلا كود بينهما يجعلهما تشتركان في نفس الكود.

switch في C تعمل مع الأعداد الصحيحة والحروف فقط، ولا تعمل مع النصوص.

ماذا لو نسيت break؟

int level = 1;
switch (level) {
case 1:
printf("المستوى الأول\n");
case 2:
printf("المستوى الثاني\n");
break;
default:
printf("مستوى آخر\n");
}
الناتج
المستوى الأول
المستوى الثاني

القيمة 1 فقط، لكن طُبع السطران! بدون break، يكمل التنفيذ منزلقاً إلى الحالة التالية حتى يجد break. هذا يسمى Fall-through، ومع gcc -Wall -Wextra يحذرك المترجم: this statement may fall through.

تخيّل switch مثل مصعد: كل case طابق، و break زر التوقف. إذا نسيت الضغط على التوقف، يكمل المصعد للطابق التالي!

int stock = 0;
printf("%s\n", stock > 0 ? "متوفر" : "غير متوفر");
int total = 650;
int shipping = total >= 500 ? 0 : 40;
printf("الشحن: %d جنيه\n", shipping);
الناتج
غير متوفر
الشحن: 0 جنيه

اقرأه: «الشرط؟ القيمة إذا صح : القيمة إذا خطأ». و %s محدد طباعة النصوص.

اكتب برنامجاً لآلة حاسبة بسيطة:

  1. متغيران رقميان a و b، ومتغير حرف op قيمته '+' أو '-' أو '*' أو '/'.
  2. استخدم switch على op لطباعة النتيجة المناسبة.
  3. في حالة القسمة، استخدم if لتطبع «لا يمكن القسمة على صفر» إذا كان b صفراً.
  4. أضف default تطبع «عملية غير معروفة».

تحدٍّ: استخدم المعامل الثلاثي لطباعة «زوجي» أو «فردي» لأي رقم.

  • = بدل ==: يغيّر القيمة ويجعل الشرط صحيحاً دائماً دون أي رسالة خطأ.
  • نسيان break في switch: ينزلق التنفيذ للحالة التالية.
  • switch مع النصوص: لا تعمل في C. استخدم if مع الدالة strcmp التي ستتعرف عليها في درس المصفوفات.

سؤال

في C، متى يكون الشرط if (n) صحيحاً؟

سؤال

ماذا يحدث إذا نسيت break في نهاية حالة داخل switch؟

  • if و else if و else للقرارات، والتنفيذ لأول فرع صحيح.
  • في C، الصفر خطأ وأي رقم آخر صح، ونتيجة المقارنة 1 أو 0.
  • bool و true و false تحتاج #include <stdbool.h>.
  • switch للأعداد والحروف، وكل case تحتاج break لتجنب الانزلاق.
  • if (x = 5) خطأ صامت خطير، ففعّل gcc -Wall دائماً.