تو این مقاله می‌خوایم حسابی بریم سراغ یکی از پایه و اساس‌های برنامه‌نویسی به زبان C: دستورات شرطی `if` و `if…else`. قراره با مثال‌های متنوع و کاربردی، این دستورات رو موشکافی کنیم تا کاملاً برشون مسلط بشید.

به طور خلاصه، دستورات شرطی به برنامه ما اجازه میدن که بر اساس یک "شرط"، تصمیم بگیره و مسیرهای مختلفی رو دنبال کنه. یعنی چی؟ یعنی می‌تونیم به برنامه بگیم: "اگر این اتفاق افتاد، فلان کار رو بکن؛ در غیر این صورت، اون یکی کار رو انجام بده!" این قابلیت، قدرت فوق‌العاده‌ای به برنامه‌های ما میده.

دستور if در C: قدم اول تصمیم‌گیری

اولین و ساده‌ترین دستور شرطی، همون `if` هست. ساختار کلیش رو ببینیم:

if (عبارت شرطی) {
    // اگر عبارت شرطی درست (True) باشه، این دستورات اجرا میشن
}

دستور if چطور کار می‌کنه؟

کار `if` خیلی ساده‌ست: برنامه اول به «عبارت شرطی» که توی پرانتز نوشتیم نگاه می‌کنه:

  • اگه عبارت شرطی، درست (true) باشه، کدها و دستوراتی که داخل بلوک `if` (بین آکولادها `{}`) نوشتیم، اجرا میشن.
  • اما اگه عبارت شرطی نادرست (false) باشه، دستورات داخل بلوک `if` کلاً نادیده گرفته میشن و برنامه از بعد از آکولاد بسته‌شده `}` ادامه پیدا می‌کنه.

برای اینکه بهتر بفهمید عبارت‌های شرطی چطور درست یا نادرست ارزیابی میشن (مقدار غیر صفر برای درست و صفر برای نادرست)، می‌تونید به بخش مربوط به عملگرهای رابطه‌ای و منطقی در مقاله عملگرها در برنامه نویسی C مراجعه کنید.

مثال ۱: دستور if

بیاید با یه مثال ساده شروع کنیم تا `if` رو بهتر بفهمیم. این برنامه یه عدد از کاربر می‌گیره و اگه اون عدد منفی باشه، پیغامی رو نشون میده:

// برنامه بررسی عدد منفی
#include <stdio.h>

int main() {
    int inputNumber; // یک متغیر برای ذخیره عدد ورودی
    printf("یه عدد صحیح وارد کن: ");
    scanf("%d", &inputNumber);

    // اگر عدد ورودی کوچکتر از 0 باشه، این شرط درست میشه
    if (inputNumber < 0) {
        printf("شما عدد %d رو وارد کردید. \n", inputNumber);
    }
    printf("دستور if خیلی راحته!"); // این خط همیشه اجرا میشه

    return 0;
}

خروجی احتمالی (۱):

یه عدد صحیح وارد کن: -7
شما عدد -7 رو وارد کردید.
دستور if خیلی راحته!

تو این حالت، وقتی کاربر عدد -7 رو وارد می‌کنه، شرط inputNumber < 0 درست ارزیابی میشه و جمله "شما عدد -7 رو وارد کردید." توی خروجی نمایش داده میشه.

خروجی احتمالی (۲):

یه عدد صحیح وارد کن: 10
دستور if خیلی راحته!

این بار، اگه کاربر عدد 10 رو وارد کنه، عبارت شرطی inputNumber < 0 نادرست ارزیابی میشه و دستور داخل بلوک `if` اجرا نمیشه. برنامه مستقیماً به خط بعد از بلوک `if` میره و پیام "دستور if خیلی راحته!" رو نشون میده.

دستور if…else در C

اگه بخوایم برنامه‌مون دو مسیر کاملاً متفاوت رو بر اساس درست یا نادرست بودن یه شرط طی کنه، از دستور `if…else` استفاده می‌کنیم. یعنی اگه شرط درست بود یه کار انجام بده و اگه غلط بود، کار دیگه‌ای رو.

ساختار دستور if…else به صورت زیره:

if (عبارت شرطی) {
    // اگر عبارت شرطی درست (True) باشه، این دستورات اجرا میشن
}
else {
    // اگر عبارت شرطی نادرست (False) باشه، این دستورات اجرا میشن
}

دستور if…else چطور کار می‌کنه؟

با if…else، دیگه هیچ‌وقت دستوری نادیده گرفته نمیشه و همیشه یکی از دو بلوک کد اجرا میشه:

  • اگه «عبارت شرطی» درست باشه:
    • دستورات داخل بلوک `if` اجرا میشن.
    • دستورات داخل بلوک `else` کلاً نادیده گرفته میشن و اجرا نمیشن.
  • اگه «عبارت شرطی» نادرست باشه:
    • دستورات داخل بلوک `else` اجرا میشن.
    • دستورات داخل بلوک `if` کلاً نادیده گرفته میشن و اجرا نمیشن.

مثال ۲: دستور if…else

بیایید با یه برنامه ساده تعیین کنیم که آیا یک عدد زوج هست یا فرد:

// عدد زوج است یا فرد؟
#include <stdio.h>

int main() {
    int checkNumber; // متغیری برای ذخیره عدد
    printf("یه عدد صحیح وارد کن: ");
    scanf("%d", &checkNumber);

    // اگه باقیمانده تقسیم عدد به 2 صفر باشه، شرط درسته (زوج)
    if (checkNumber % 2 == 0) {
        printf("%d یه عدد زوج هست. \n", checkNumber);
    }
    // در غیر این صورت، عدد فرده
    else {
        printf("%d یه عدد فرد هست. \n", checkNumber);
    }

    return 0;
}

خروجی:

یه عدد صحیح وارد کن: 7
7 یه عدد فرد هست.

وقتی کاربر عدد 7 رو وارد می‌کنه، عبارت شرطی checkNumber % 2 == 0 (که معادل 7 % 2 == 0 هست) نادرست ارزیابی میشه و مقدار 0 رو برمی‌گردونه. در نتیجه، دستورات داخل بلوک `else` اجرا میشن و پیام "7 یه عدد فرد هست." نمایش داده میشه.

if…else نردبانی در C

گاهی اوقات، انتخاب‌های ما بیشتر از دو گزینه هستن. مثلاً می‌خوایم برای چندین حالت مختلف، کارهای متفاوتی انجام بدیم. اینجا `if…else` نردبانی (Ladder) به کمکمون میاد.

این ساختار به شما اجازه میده که بین چندین عبارت شرطی به ترتیب بررسی کنید و هر جا یکی از شرط‌ها درست بود، بلوک کد مربوط به اون اجرا بشه.

ساختار if…else نردبانی:

if (عبارت شرطی ۱) {
    // دستور(ها)ی مربوط به عبارت شرطی ۱
}
else if(عبارت شرطی ۲) {
    // دستور(ها)ی مربوط به عبارت شرطی ۲
}
else if (عبارت شرطی ۳) {
    // دستور(ها)ی مربوط به عبارت شرطی ۳
}
// .
// .
else {
    // اگر هیچ کدام از شرط‌های بالا درست نبودند، این دستور(ها) اجرا می‌شوند
}

مثال ۳: if…else نردبانی در C

بیاید برنامه‌ای بنویسیم که دو عدد صحیح رو از کاربر بگیره و رابطه بینشون (برابر، بزرگتر، کوچکتر) رو نشون بده:

// برنامه ای برای مقایسه دو عدد صحیح
#include <stdio.h>

int main() {
    int firstNum, secondNum; // دو متغیر برای اعداد ورودی
    printf("دو عدد صحیح وارد کن: ");
    scanf("%d %d", &firstNum, &secondNum);

    // بررسی می‌کنه آیا دو عدد مساوی هستن
    if(firstNum == secondNum) {
        printf("نتیجه: %d = %d \n", firstNum, secondNum);
    }
    // بررسی می‌کنه آیا عدد اول بزرگتر از عدد دوم هست
    else if (firstNum > secondNum) {
        printf("نتیجه: %d > %d \n", firstNum, secondNum);
    }
    // اگه هیچ کدوم از شرط‌های بالا درست نبودند، یعنی عدد اول کوچکتره
    else {
        printf("نتیجه: %d < %d \n", firstNum, secondNum);
    }

    return 0;
}

خروجی:

دو عدد صحیح وارد کن: 12
23
نتیجه: 12 < 23

if…else تودرتو در C

شما می‌تونید یک دستور if…else رو داخل بلوک `if` یا `else` یک دستور if…else دیگه بنویسید. به این حالت، if…else تودرتو (Nested) میگن.

مثلاً، برنامه زیر دقیقاً شبیه مثال ۳ عمل می‌کنه و رابطه بین دو عدد صحیح رو نشون میده، اما این بار با استفاده از ساختار تودرتو:

مثال ۴: if…else تودرتو

#include <stdio.h>

int main() {
    int numA, numB; // دو متغیر برای اعداد

    printf("دو عدد صحیح وارد کن: ");
    scanf("%d %d", &numA, &numB);

    if (numA >= numB) { // شرط اول: آیا numA بزرگتر یا مساوی numB است؟
        if (numA == numB) { // اگر شرط اول درست بود، حالا این شرط رو بررسی کن: آیا مساوی هستند؟
            printf("نتیجه: %d = %d \n", numA, numB);
        }
        else { // اگر numA بزرگتر یا مساوی numB بود، اما مساوی نبود، پس قطعاً بزرگتره
            printf("نتیجه: %d > %d \n", numA, numB);
        }
    }
    else { // اگر شرط اول (numA >= numB) نادرست بود، پس قطعاً numA کوچکتر از numB است
        printf("نتیجه: %d < %d \n", numA, numB);
    }

    return 0;
}

یه نکته کوچیک اما مهم: اگه بلوک کد داخل دستور `if` یا `else` فقط شامل یک دستور باشه، نیازی به استفاده از آکولاد `{}` نیست. این کار کد رو کوتاه‌تر و خواناتر می‌کنه، اما اگه بیش از یک دستور داشتید، حتماً از آکولاد استفاده کنید.

به عنوان مثال، این کد:

if (myVal > otherVal) {
    printf("Hello");
}
printf("Hi");

با کد زیر کاملاً یکسان عمل می‌کنه:

if (myVal > otherVal)
    printf("Hello");
printf("Hi");

امیدواریم این آموزش جامع و دوستانه براتون مفید بوده باشه و تونسته باشید با دستورات شرطی `if` و `if…else` در زبان C به خوبی آشنا بشید.

این مقاله توسط سایت علمی رایشمند برای شما آماده شده است.