সি প্রোগ্রামিং – switch case

একটা ভ্যালু এর উপর নির্ভর করে অনেক গুলো স্টেটম্যান্ট থেকে একটা স্টেটম্যান্ট এক্সিকিউট করার জন্য switch case ব্যবহার করা হয়। switch case  সাধারণত নিচের মত করে লেখা হয়ঃ

switch ( variable ) {
    case expression 1:
        statement;
        break;
    case expression 2:
        statement;
        break;
    case expression 3:
        statement;
        break;
    default:
        statement;
        break;

}

এখানে যদি switch ( variable ) এর variable  টির মান expression 1 এর সাথে মিলে, তাহলে case expression 1 এর  statement এক্সিকিউট হবে। যদি variable  টির মান expression 2 এর সাথে মিলে, তাহলে case expression 2 এর  statement এক্সিকিউট হবে। যদি variable  টির মান expression 3 এর সাথে মিলে, তাহলে case expression 3 এর  statement এক্সিকিউট হবে। যদি কোনটির সাথেই না মিলে, তাহলে default এর  statement টি এক্সিকিউট হবে। এখানে যত ইচ্ছে তত গুলো case যুক্ত করা যাবে।  আর case এর স্টেটম্যান্ট শেষে break; যুক্ত করতে হয়। break; মানে হচ্ছে আমাদের কাজ শেষ, এবার switch case থেকে বের হতে পারি। break; টা খুবি গুরুত্ত্বপূর্ণ।

এখনো একটু জটিল মনে হতে পারে বিষয়টা, আমরা একটা উদাহরন দেখলে অনেক সহজ হয়ে যাবে এই switch case স্টেটম্যান্টটি। আমরা একটা প্রোগ্রাম লিখব এমন, যেখানে যদি আমরা r ইনপুট দি, তাহলে লেখা উঠবে You select Red, যদি w ইনপুট দি, তাহলে লেখা উঠবে You select White. যদি b ইনপুট দি, তাহলে লেখা উঠবে You select Black. আর প্রোগ্রামটা লিখব আমরা switch case ব্যবহার করে।

#include <stdio.h>
int main ()
{
char colorCode;
printf("Enter first word of Red, White or Black: \n");
scanf("%c", &colorCode);


switch ( colorCode ) {
    case 'r' :
    printf("You select Red.");
    break;

    case 'w':
    printf("You select White.");
    break;

    case 'b':
    printf("You select Black.");
    break;

    default:
    printf("Wrong choose!");
    break;
}
return 0;
}

উপরের প্রোগ্রামটি রান করি, তারপর r, w, b এ তিনটার মধ্যে যে কোন একটা ইনপুট দিলে ঐ কালারটা দেখবে। আর যদি আমরা অন্য কোন কারেকটার ইনপুট দি, তাহলে লেখা উঠবে Wrong choose!।
switch case এর switch ( colorFirsWord ) এর ভেতরে যে ভ্যারিয়েবলটি রয়েছে, তার মান যদি case ‘r’ এর সাথে মিলে, মানে colorFirsWord এর মান r হয়, তাহলে প্রোগ্রামটি এ স্টেটম্যান্টটি এক্সিকিউট করবেঃ printf(“You select Red.”); এরপরের স্টেটম্যান্ট হচ্ছে break; মানে হচ্ছে আমরা যে কাজ করার জন্য switch case এর ভেতরে প্রবেশ করেছি, তা শেষ হয়েছে। switch case থেকে এবার আমরা বের হতে পারি। break দিয়ে switch case ঐখানেই বন্ধ করে দেওয়া হয়।

একই ভাবে যদি আমরা w ইনপুট দি, তাহলে case ‘r’ এর সাথে মিলিয়ে দেখবে। যেহেতু আমরা w ইনপুট দিয়েছি, প্রথম case এর সাথে মিলে না। পরের case দেখবে। পরের case এ এসে দেখবে case ‘w’ তে ইনপুটির সাথে মিল পেয়েছে, তাই এর পরে থাকা স্টেটম্যান্টটি এক্সিকিউট করবে। printf(“You select White.”); এবং এর পর break দিয়ে switch case থেকে বের হবে।

একই ভাবে আমরা যদি b ইনপুট দি, তাহলে উপরের দুইটা case এ কোন মিল পাবে না, তাই ঐ case গুলোর স্টেটম্যান্ট গুলোও এক্সিকিউট হবে না। শুধু মাত্র case ‘b’ এর স্টেটম্যান্ট গুলো এক্সিকিউট হবে।

যদি আমরা অন্য কোন কারেকটার ইনপুট দি, তাহলে তার জন্য রয়েছে ডিফল্ট ভ্যালু। তখন লেখা উঠবে Wrong choose!

বিদ্রঃ switch ( colorCode ) এর এখানে যে কোন Expression আমরা লিখতে পারি। এমন একটা উদাহরন আমরা দেখব। আবার case এ আমরা একের অধিক স্টেটম্যান্ট লিখতে পারব। তার উদাহরণ একটু পরই দেখব।

উপরের প্রোগ্রামটিতে আমরা যদি বড় হাতে R, W বা B ইনপুট দি, তাহলে লেখা উঠবে Wrong choose!। এখন আমরা উপরের প্রোগ্রামটিকে আরেকটু মডিফাই করব, যেন ছোট বা বড় হাতে colorCode ইনপুট দিলে উভয় ক্ষেত্রেই আমাদের সঠিক আউটপুট দেয়।

#include <stdio.h>
int main ()
{
char colorCode;
printf("Enter first word of Red, White or Black: \n");
scanf("%c", &colorCode);


switch ( colorCode ) {
    case 'r' :
    case 'R' :
    printf("You select Red.");
    break;

    case 'w':
    case 'W' :
    printf("You select White.");
    break;

    case 'b':
    case 'B' :
    printf("You select Black.");
    break;

    default:
    printf("Wrong choose!");
    break;
}
return 0;
}

এখানে আমরা লক্ষ্য করলে দেখব আমরা এখন break এর ব্যবহার ছাড়া এক সাথে দুই বার case ব্যবহার করেছি। যেমনঃ

case ‘r’ :
case ‘R’ :

এভাবে break ছাড়া একের অধিক case লিখলে সে গুলো OR অপারেশনের মত কাজ করে। একটা সত্য হলে ঐ case গুলোর পরের Expression গুলো এক্সিকিউট হবে। এবং break পাওয়া পর্যন্ত অপেক্ষা করবে।

switch case এর ভেতরে যে কোন কোডই রান করানো যায়, লুপ চালানো, ফাংশন কল করা সহ সব কিছু। প্রথমে একটা প্রোগ্রাম লিখব, যেখানে switch case এর ভেতরে আমরা একবার for লুপ ব্যবহার করব, একবার while লুপ ব্যবহার করব। এটা বুঝানোর জন্য যে আমরা ইচ্ছে করলে যে কোন কোডই রান করাতে পারি switch case এর মধ্যেঃ

#include <stdio.h>
int main ()
{
int code;
int i = 0;
printf("Enter 1 to print even integers or enter 2 to print odd integers: ");
scanf("%d", &code);


switch ( code ) {
    case 1 :
        while(i<=100){
            printf("%d \n", i);
            i=i+2;
        }
    break;


    case 2 :
         for(i =1; i<=100; i=i+2)
                printf("%d \n", i);

    break;


    default:
    printf("Wrong choose!");
    break;
}
return 0;
}

প্রোগ্রামটা আমাদের 1 অথবা 2 ইনপুট দিতে বলবে। 1 ইনপুট দিলে ১ থেকে ১০০ পর্যন্ত বেজোড় সংখ্যা গুলো প্রিন্ট করবে। আর 2 ইনপুট দিলে ১ থেকে ১০০ পর্যন্ত জোড় সংখ্যা গুলো প্রিন্ট করবে।

আমরা ইচ্ছে করলে switch case এর ভেতর থেকে ফাংশন ও কল করতে পারি। নিচের প্রোগ্রামটি দেখিঃ

#include <stdio.h>
int main ()
{
    void playGame(){
       printf("You choose to Play the game.");
        }
    void closeGame(){
       printf("You choose to Close the game.");
        }


int code;

printf("Enter 1 to play the Game.\nEnter 2 to close the Game :");
scanf("%d", &code);


switch ( code ) {
    case 1 :
        playGame();
        break;


    case 2 :
        closeGame();
        break;


    default:
    printf("Wrong choose!");
    break;
}
return 0;
}

আমরা দুইটা ফাংশন তৈরি করেছি, playGame() এবং closeGame()। ব্যবহারকারী 1 ইনপুট দিলে playGame() ফাংশনটি কল হবে, এবং 2 ইনপুট দিলে closeGame() ফাংশন কল হবে… এভাবে নিজের মত করে নিজের ক্রিয়েটিভিটি ব্যবহার করে আমরা প্রয়োজন মত আমাদের প্রোগ্রামে switch case ব্যবহার করতে পারি। শুভ প্রোগ্রামিং 🙂

Leave a Reply