مهندس موفق الکترونیک

دستور Switch Case در زبان C همراه با مثال

دستور Switch چیست؟ در این جلسه به بررسی دستور Switch Case در زبان C همراه با مثال خواهیم پرداخت. دستور Switch محتوای یک متغیر را تست کرده و آن را با چندین مقدار دیگر مقایسه می کند. هرگاه که مورد مطابق پیدا شود، بلوک دستور مربوط به آن مورد(کیس) اجرا می شود. هر کیس(case) در هر بلوک از switch یک نام/عدد متفاوت داشته که برای آن به منزله شناسه هم حساب می شود. مقدار مورد نظر کاربر با همه کیس های درون بلوک switch مقایسه شده تا یک مورد مطابق پیدا شود. اگر مورد مطابق پیدا نشود، آنگاه دستور پیش فرض اجرا شده و کنترل برنامه به خارج از بلوک switch منتقل می شود.

در این محبث خواهیم آموخت:

  • دستور Switch چیست؟
  • دستورزبان
  • دیاگرام فلوچارت Switch Case
  • مثال
  • Switch تودرتو
  • چرا به Switch case نیاز داریم؟
  • قواعد Switch Case

دستور Switch Case در زبان C

دستور زبان عمومی استفاده از Switch-case  در زبان C به صورت زیر است:

switch( expression )

{

         case value-1:

                          Block-1;

                          Break;

         case value-2:

                          Block-2;

                          Break;

         case value-n:

                          Block-n;

                          Break;

         default:

                          Block-1;

                          Break;

}

Statement-x;

  • Expression می تواند یک عبارت integer و یا یک عبارت کارکتری باشد.
  • مقدار -1، -2، -n برچسب کیس ها هستند که برای شناسایی هر کیس به صورت مجزا استفاده می شوند. به یاد داشته باشید که برچسب کیسها نباید همانند هم باشند زیرا چنین وضعیتی ممکن است اجرای برنامه را با مشکل مواجه سازد. فرض کنیم دو کیس با نام یکسان ‘1’ داریم. در این حالت در اجرای برنامه، ، کیس اولی که در Switch ظاهر می شود اجرا خواهد شد حتی اگر قصد شما اجرای کیس دوم بوده است.این مسئله در برنامه تولید مشکل کرده و خروجی مطلوب را به بار نخواهد آورد.
  • برچسب کیس ها همواره با یک کولون(:) پایان می یابد. هرکدام از این کیس ها بلوک مرتبط به خود را دارا می باشد.
  • یک بلوک چیزی جز چندین دستور نیست که برای یک کیس خاص گروه بندی گردیده است.
  • هنگام اجرای switch ، مقدار عبارت تست با همه کیس هایی که درون Switch تعریف شده اند مقایسه می شود. فرض کنیم که مقدار عبارت تست برابر 4 باشد. این مقدار با همه کیس ها مقایسه شده تا کیسی که برچسب آن مساوی 4 است پیدا شود.به محض یافتن کیس، بلوک دستور مرتبط با آن کیس اجرا شده و کنترل برنامه به خارج از switch منتقل می شود.
  • کیلدواژه break در هر کیس نشانگر پایان آن کیس است. اگر break را در هرکدام از کیس ها قرار ندهیم، آنگاه حتی با وجود اجرای یک کیس، switch به اجرای خود ادامه داده تا همه کیس ها را اجرا کرده و به انتهای خود برسد. این اتفاق نباید روی دهد؛ پس ما همواره باید کلیدواژه break را در هر کیس قرار دهیم. Break کیس را بعد از اجرا خاتمه داده و کنترل برنامه را به خارج از switch   منتقل می کند.
  • کیس پیش فرض(default) اختیاری می باشد. زمانی که عبارت تست ها با هیچکدام از کیس های درون switch مطابقت نداشته باشد، کیس default اجرا می شود. در غیر این صورت، نیازی به نوشتن کیس default در switch نیست.
  • وقتی که switch اجرا می شود، کنترل برنامه به Statement-x رفته و اجرای برنامه ادامه خواهد یافت.
مطلب پیشنهادی:  حلقه ها در زبان C

دیاگرام فلوچارت Switch Case

دیاگرام زیر نحوه انتخاب کیس در switch case را نشان می دهد.

دستور Switch Case

مثال

مثال زیر کاربرد switch را نشان می دهد:

#include <stdio.h>

    int main() {

        int num = 8;

        switch (num) {

            case 7:

                printf("Value is 7");

                break;

            case 8:

                printf("Value is 8");

                break;

            case 9:

                printf("Value is 9");

                break;

            default:

                printf("Out of range");

                break;

        }

        return 0;

    }

خروجی:

Value is 8

تصویر 2

  1. در برنامه داده شده متغیر num را با مقدار 8 آغاز کرده ایم.
  2. از یک ساختار switch برای مقایسه مقدار ذخیره شده در متغیر num و اجرای بلوک های مربوط به کیس مطابقت یافته استفاده می کنیم.
  3. در این برنامه، از آنجایی که مقدار ذخیره شده در متغیر num هشت است، Switch کیسی را اجرا می کند که برچسبش برابر 8 باشد. بعد از اجرای این کیس، کنترل برنامه به خارج از switch منتقل شده و برنامه با خروجی موفقیت آمیز چاپ مقدار روی صفحه، به پایان می رسد.

سعی کنید مقدار متغیر num را تغییر داده و تغییرات خروجی را مشاهده کنید.

برای مثال، برنامه زیر داری کیس default نیز هست:

#include <stdio.h>

int main() {

int language = 10;

  switch (language) {

  case 1:

    printf("C#\n");

    break;

  case 2:

    printf("C\n");

    break;

  case 3:

    printf("C++\n");

    break;

  default:

    printf("Other programming language\n");}}


خروجی:

Other programming language

هنگام کار کردن با دستور Switch Case در زبان C، چندین کیس را با یک برچسب واحد گروه بندی کنید. برای شاخه بندی در انتهای دستور switch، شما باید از دستور break در هر کیس استفاده کنید. کیس default زمانی اجرا می شود که هیچ مطابقتی وجود نداشته باشد.

مطلب پیشنهادی:  اشاره گرهای تابع در برنامه نویسی C

دستور switch زیر را ملاحظه کنید:

#include <stdio.h>

int main() {

int number=5;

switch (number) {

  case 1:

  case 2:

  case 3:

    printf("One, Two, or Three.\n");

    break;

  case 4:

  case 5:

  case 6:

    printf("Four, Five, or Six.\n");

    break;

  default:

    printf("Greater than Six.\n");}}

خروجی:

Four, Five, or Six.

Switch تودرتو

در زبان C، می توان یک Switch درونی در یک Switch بیرونی جا داد. همچنین، ثابت کیس های درونی و بیرونی ممکن است مقادیر مشترک داشته باشند بدون اینکه ناسازگاری پیش بیاید. برنامه زیر را در نظر بگیرید، در این برنامه کاربر ID خود را وارد می کند، اگر ID معتبر باشد از او درخواست وارد کردن کلمه عبور می شود، و اگر کلمه عبور صحیح باشد برنامه نام کاربر را چاپ می کند، و در غیر این صورت برنامه عبارت Incorrect Password و اگر نام کاربری وجود نداشته باشد برنامه  Incorrect ID را چاپ می کند.

#include <stdio.h>

int main() {

        int ID = 500;

        int password = 000;

        printf("Plese Enter Your ID:\n ");

        scanf("%d", & ID);

        switch (ID) {

            case 500:

                printf("Enter your password:\n ");

                scanf("%d", & password);

                switch (password) {

                    case 000:

                        printf("Welcome Dear Programmer\n");

                        break;

                    default:

                        printf("incorrect password");

                        break;

                }

                break;

            default:

                printf("incorrect ID");

                break;

        }

}

خروجی:

Plese Enter Your ID:

 500

Enter your password:

 000

Welcome Dear Programmer

تصویر 2

  1. در برنامه داده شده، ما دو متغیر را مقداردهی اولیه کرده ایم: ID و password
  2. Switch بیرونی برای مقایسه مقدار وارد شده برای متغیر ID بکار می رود. این دستور بلوک مربوط به کیس مطابقت یافته(زمانی که ID=500) را اجرا می کند.
  3. اگر بلوک دستور عبارت تطابق یافته اجرا شود، یک switch داخلی برای مقایسه مقدار وارد شده برای متغیر password وارد عمل شده و بلوک دستورات مربوط به عبارت منطبق(زمانی که password=000) را اجرا می کند.
مطلب پیشنهادی:  تخصیص حافظه پویا در C با malloc ، calloc ، realloc و free

چرا به Switch Case نیاز داریم؟

هنگام استفاده از ساختار if-else مشکلی بالقوه وجود دارد، زیرا پیچیدگی برنامه با افزایش مسیرهای آلترناتیو افزایش می یابد. اگر چندین ساختار if-else در برنامه داشته باشیم، خواندن و درک برنامه ممکن است با دشواری مواجه شود. گاهی اوقات ممکن است حتی توسعه دهنده ای که برنامه را نوشته را سردرگم شود.

راه حل این مشکل استفاده از دستور Switch است.

قواعد دستور Switch

  • هر عبارت باید همواره به یک نتیجه ختم شود.
  • برچسب کیس ها باید ثابت و یکتا باشد.
  • برچسب کیس ها باید به کارکتر کولون(:) ختم شود.
  • تنها یک برچسب default مجاز است.
  • می توان چندین دستور Switch تودرتو داشت.

خلاصه

  • Switch یک ساختار تصمیم گیرنده در زبان ‘C’ می باشد.
  • Switch در برنامه هایی استفاده می شود که چندین تصمیم در آن درگیر هستند.
  • یک Switch باید حاوی یک عبارت تست قابل اجرا باشد.
  • هر کیس باید حاوی یک کلیدواژه break باشد.
  • برچسب کیس باید ثابت و یکتا باشد.
  • کیس default اختیاری است.
  • چندین دستور Swtich را می توان درون یکدیگر تودرتو کرد.

اگر این نوشته‌ برایتان مفید بود لطفا کامنت بنویسید.

مطالعه دیگر جلسات این آموزش<< جلسه قبلی                    جلسه بعدی >>

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

3 دیدگاه

  1. عالی بود ممنونم

  2. داریوش جان اکبری

    با سلام توضیحات خیلی شیوا و گویا بودند ممنونم

  3. خوب بود ممنون