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

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

الدرس 3 من 11 · C++

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

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

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

تخيّل الشروط مثل لافتات الطريق في تقاطع: تقرأ اللافتة الأولى، فإن انطبقت عليك تسلك طريقها، وإلا تنظر للتالية، وإن لم تنطبق أي لافتة تأخذ الطريق الافتراضي (else).

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

int age = 16;
bool hasTicket = true;
if (age >= 13 && hasTicket) {
cout << "تفضل بالدخول" << endl;
}
الناتج
تفضل بالدخول

مع النوع string، تعمل المقارنة بـ == بشكل طبيعي وتقارن المحتوى:

string password = "1234";
if (password == "1234") {
cout << "كلمة المرور صحيحة" << endl;
}
الناتج
كلمة المرور صحيحة

هذا تحسين كبير عن C، حيث كان يجب استخدام strcmp، وعن Java حيث تقارن == العناوين. في C++‎ مع string، ما تتوقعه هو ما يحدث.

int stock = 0;
string status = stock > 0 ? "متوفر" : "غير متوفر";
cout << status << endl;
الناتج
غير متوفر

«الشرط ؟ القيمة إذا صح : القيمة إذا خطأ». مفيد لاختيار قيمة في سطر واحد.

للمقارنة مع قيم ثابتة متعددة، مثل الأرقام والحروف:

char op = '*';
int a = 6, b = 3;
switch (op) {
case '+':
cout << a + b << endl;
break;
case '*':
cout << a * b << endl;
break;
default:
cout << "عملية غير معروفة" << endl;
}
الناتج
18
  • كل case تنتهي بـ break، وإلا ينزلق التنفيذ للحالة التالية.
  • default لكل قيمة لم تُذكر.
  • switch تعمل مع الأعداد الصحيحة والحروف، ولا تعمل مع string. للنصوص استخدم if و else if.

في C++‎ الحديثة، يمكنك تعريف متغير داخل الشرط نفسه:

if (int total = 650; total >= 500) {
cout << "شحن مجاني" << endl;
} else {
cout << "الشحن 40 جنيهاً" << endl;
}
الناتج
شحن مجاني

المتغير total موجود فقط داخل هذا الشرط وفروعه، ويختفي بعده. هذا يُبقي الكود نظيفاً عندما تحتاج متغيراً مؤقتاً للفحص فقط.

اكتب برنامج تقييم سرعة إنترنت:

  1. متغير speed بوحدة ميجابت.
  2. بـ if و else if: أقل من 5 «بطيء»، ومن 5 إلى 50 «جيد»، وأكثر من 50 «ممتاز».
  3. متغير plan من نوع string، وإذا كان "premium" اطبع «لديك دعم فني أولوية».
  4. تحدٍّ: آلة حاسبة بـ switch على الحرف op تدعم العمليات الأربع، وترفض القسمة على صفر.
  • نسيان break في switch: تُنفَّذ الحالات التالية أيضاً.
  • switch مع string: خطأ ترجمة. استخدم if و else if.
  • فاصلة منقوطة بعد if: if (x > 5); تجعل الشرط بلا جسم، والكود بعده يُنفَّذ دائماً!

سؤال

في C++‎، كيف تقارن متغيراً من نوع string بالنص «admin»؟

سؤال

ما الأنواع التي يعمل معها switch في C++‎؟

  • if و else if و else للقرارات، وأول فرع صحيح فقط يُنفَّذ.
  • string تُقارن بـ == مباشرة حسب المحتوى.
  • المعامل الثلاثي لاختيار قيمة في سطر واحد.
  • switch للأعداد والحروف، و break ضرورية في كل حالة.
  • C++17 تسمح بتعريف متغير داخل if ليبقى في نطاقه فقط.