تو این مقاله میخوایم حسابی بریم سراغ یکی از پایه و اساسهای برنامهنویسی به زبان 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 به خوبی آشنا بشید.
این مقاله توسط سایت علمی رایشمند برای شما آماده شده است.