स्विच…सी में केस (सी में स्विच स्टेटमेंट) उदाहरणों के साथ

⚡ स्मार्ट सारांश

C में स्विच स्टेटमेंट एक एक्सप्रेशन की तुलना कई केस लेबल से करता है और मैचिंग ब्लॉक को चलाता है, जिससे लंबे इफ-एल्स चेन का एक साफ-सुथरा विकल्प मिलता है जब किसी प्रोग्राम को कई निश्चित पूर्णांक या वर्ण मानों में से चुनना होता है।

  • 🔀 बहु-मार्ग शाखाकरण: एक स्विच एक एक्सप्रेशन का परीक्षण करता है और उससे मेल खाने वाले केस लेबल पर जंप करता है।
  • केस लेबल: प्रत्येक मामले में एक अद्वितीय स्थिर पूर्णांक या वर्ण लेबल का उपयोग किया जाता है जो कोलन पर समाप्त होता है।
  • ब्रेक कीवर्ड: ब्रेक स्टेटमेंट किसी केस को समाप्त करता है; इसके बिना, कार्यवाही रुक जाती है।
  • 🧩 डिफ़ॉल्ट स्थिति: जब कोई केस लेबल एक्सप्रेशन से मेल नहीं खाता है, तो वैकल्पिक डिफ़ॉल्ट ब्लॉक चलता है।
  • ???? स्विच नियम: केस लेबल स्थिर और अद्वितीय रहते हैं, केवल एक डिफ़ॉल्ट लेबल की अनुमति होती है।

C में स्विच स्टेटमेंट

सी में स्विच स्टेटमेंट क्या है?

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;
  • अभिव्यक्ति पूर्णांक अभिव्यक्ति या वर्ण अभिव्यक्ति हो सकती है।
  • मान-1, 2, n केस लेबल हैं जिनका उपयोग प्रत्येक केस को अलग-अलग पहचानने के लिए किया जाता है। याद रखें कि केस लेबल एक जैसे नहीं होने चाहिए क्योंकि इससे प्रोग्राम निष्पादित करते समय समस्या हो सकती है। मान लीजिए कि हमारे पास '1' के समान लेबल वाले दो केस हैं। फिर प्रोग्राम निष्पादित करते समय, जो केस पहले दिखाई देता है उसे निष्पादित किया जाएगा, भले ही आप चाहते हों कि प्रोग्राम दूसरा केस निष्पादित करे। इससे प्रोग्राम में समस्याएँ पैदा होती हैं और वांछित आउटपुट नहीं मिलता है।
  • केस लेबल हमेशा कोलन ( : ) से समाप्त होते हैं। इनमें से प्रत्येक केस एक ब्लॉक से जुड़ा होता है।
  • ब्लॉक कुछ और नहीं बल्कि कई कथन होते हैं जिन्हें किसी विशेष मामले के लिए समूहीकृत किया जाता है।
  • जब भी स्विच निष्पादित होता है, तो टेस्ट-एक्सप्रेशन के मान की तुलना उन सभी मामलों से की जाती है जिन्हें हमने स्विच के अंदर परिभाषित किया है। मान लीजिए कि टेस्ट एक्सप्रेशन में मान 4 है। इस मान की तुलना सभी मामलों से की जाती है जब तक कि प्रोग्राम में लेबल चार वाला मामला न मिल जाए। जैसे ही कोई मामला पाया जाता है, उस विशेष मामले से जुड़े कथनों का ब्लॉक निष्पादित हो जाता है और नियंत्रण स्विच से बाहर चला जाता है।
  • प्रत्येक केस में ब्रेक कीवर्ड किसी विशेष केस के अंत को इंगित करता है। यदि हम प्रत्येक केस में ब्रेक नहीं डालते हैं, तो भले ही विशिष्ट केस निष्पादित हो जाए, C में स्विच अंत तक पहुंचने तक सभी केसों को निष्पादित करना जारी रखेगा। ऐसा नहीं होना चाहिए; इसलिए हमें हमेशा प्रत्येक केस में ब्रेक कीवर्ड डालना होगा। ब्रेक केस के निष्पादित होने के बाद उसे समाप्त कर देगा और नियंत्रण स्विच से बाहर हो जाएगा।
  • डिफ़ॉल्ट केस एक वैकल्पिक केस है। जब भी टेस्ट-एक्सप्रेशन का मान स्विच के अंदर किसी भी केस से मेल नहीं खाता है, तो डिफ़ॉल्ट निष्पादित किया जाएगा। अन्यथा, स्विच में डिफ़ॉल्ट लिखना आवश्यक नहीं है।
  • एक बार स्विच निष्पादित हो जाने पर नियंत्रण स्टेटमेंट-x पर चला जाएगा, और प्रोग्राम का निष्पादन जारी रहेगा।

स्विच स्टेटमेंट फ़्लोचार्ट

निम्नलिखित चित्र दर्शाता है कि स्विच केस में केस का चयन कैसे किया जाता है:

स्विच स्टेटमेंट फ़्लोचार्ट

स्विच कैसे काम करता है

सी में स्विच केस का उदाहरण

निम्नलिखित प्रोग्राम स्विच के उपयोग को दर्शाता है:

#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

सी में स्विच केस का उदाहरण

  1. दिए गए प्रोग्राम में हमने एक को इनिशियलाइज़ किया है। परिवर्तनशील मान 8 के साथ संख्या.
  2. स्विच कंस्ट्रक्ट का उपयोग वेरिएबल num में संग्रहीत मान की तुलना करने और मिलान किए गए केस से जुड़े कथनों के ब्लॉक को निष्पादित करने के लिए किया जाता है।
  3. इस प्रोग्राम में, चूंकि चर num में संग्रहीत मान आठ है, इसलिए एक स्विच उस केस को निष्पादित करेगा जिसका केस-लेबल 8 है। केस को निष्पादित करने के बाद, नियंत्रण स्विच से बाहर हो जाएगा और आउटपुट स्क्रीन पर मान को प्रिंट करके सफल परिणाम के साथ प्रोग्राम समाप्त हो जाएगा।

चर num का मान बदलने का प्रयास करें और आउटपुट में परिवर्तन देखें।

उदाहरण के लिए, हम निम्नलिखित प्रोग्राम पर विचार करते हैं जो डिफ़ॉल्ट रूप से:

#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

सी में स्विच केस के साथ काम करते समय, आप कई केस को अद्वितीय लेबल के साथ समूहीकृत करते हैं। स्विच स्टेटमेंट के अंत में शाखा बनाने के लिए आपको प्रत्येक केस में ब्रेक स्टेटमेंट पेश करना होगा।

वैकल्पिक डिफ़ॉल्ट केस तब चलता है जब कोई अन्य मिलान नहीं होता है।

हम निम्नलिखित स्विच कथन पर विचार करते हैं:

#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.

C में नेस्टेड स्विच

In C, हम एक बाहरी स्विच में एक आंतरिक स्विच एम्बेडेड कर सकते हैं। इसके अलावा, आंतरिक और बाहरी स्विच के केस स्थिरांक में समान मान हो सकते हैं और बिना किसी संघर्ष के।

हम निम्नलिखित प्रोग्राम पर विचार करते हैं, जो उपयोगकर्ता से उसकी आईडी टाइप करने के लिए कहता है। यदि आईडी मान्य है, तो यह उससे पासवर्ड दर्ज करने के लिए कहेगा; यदि पासवर्ड सही है, तो प्रोग्राम उपयोगकर्ता का नाम प्रिंट करेगा, अन्यथा प्रोग्राम "गलत पासवर्ड" प्रिंट करेगा; और यदि आईडी मौजूद नहीं है, तो प्रोग्राम "गलत आईडी" प्रिंट करेगा।

#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

C में नेस्टेड स्विच

  1. दिए गए प्रोग्राम में हमने दो वेरिएबल्स को इनिशियलाइज़ किया है: आईडी और पासवर्ड।
  2. वेरिएबल ID में दर्ज मान की तुलना करने के लिए एक बाहरी स्विच संरचना का उपयोग किया जाता है। यह मेल खाने वाले मामले (जब ID == 500) से जुड़े कथनों के ब्लॉक को निष्पादित करता है।
  3. यदि ब्लॉक स्टेटमेंट को मैच किए गए केस के साथ निष्पादित किया जाता है, तो वेरिएबल पासवर्ड में दर्ज किए गए मानों की तुलना करने और मैच किए गए केस (जब पासवर्ड == 000) से जुड़े स्टेटमेंट को निष्पादित करने के लिए एक आंतरिक स्विच का उपयोग किया जाता है।
  4. अन्यथा, स्विच केस डिफ़ॉल्ट केस को ट्रिगर करेगा और प्रोग्राम रूपरेखा के संबंध में उपयुक्त पाठ प्रिंट करेगा।

हमें स्विच केस की आवश्यकता क्यों है?

इसमें एक संभावित समस्या है अगर-और बयान यानी जब भी वैकल्पिक पथों की संख्या बढ़ती है, तो प्रोग्राम की जटिलता बढ़ जाती है। यदि आप प्रोग्राम में कई if-else संरचनाओं का उपयोग करते हैं, तो प्रोग्राम को पढ़ना और समझना मुश्किल हो सकता है। कभी-कभी यह उस डेवलपर को भी भ्रमित कर सकता है जिसने खुद प्रोग्राम लिखा है।

इस समस्या का समाधान स्विच स्टेटमेंट है।

स्विच स्टेटमेंट के लिए नियम

C में स्विच लिखते समय इन नियमों का पालन करें:

  • एक अभिव्यक्ति को हमेशा एक परिणाम पर निष्पादित होना चाहिए।
  • केस लेबल स्थिर और अद्वितीय होने चाहिए.
  • केस लेबल को कोलन ( : ) से समाप्त होना चाहिए।
  • प्रत्येक मामले में ब्रेक कीवर्ड मौजूद होना चाहिए।
  • केवल एक ही डिफ़ॉल्ट लेबल हो सकता है.
  • हम कई स्विच स्टेटमेंट्स को नेस्ट कर सकते हैं।

अक्सर पूछे जाने वाले प्रश्न

AC स्विच केवल int, char और enum मान स्वीकार करता है — कभी भी float या string मान स्वीकार नहीं करता, क्योंकि प्रत्येक लेबल एक स्थिर पूर्णांक होना चाहिए।

बिना किसी रुकावट के, नियंत्रण बिगड़ जाता है और बाद के सभी मामले भी चलते रहते हैं - कभी-कभी जानबूझकर, लेकिन आमतौर पर यह एक अनजाने में होने वाली त्रुटि होती है।

नहीं। C स्ट्रिंग पर स्विच नहीं कर सकता; लेबल स्थिर पूर्णांक होने चाहिए। इसके बजाय if-else कंडीशन में strcmp का उपयोग करके टेक्स्ट की तुलना करें।

मानक सी श्रेणियों को प्रतिबंधित करता है, हालाँकि जीसीसी एक गैर-पोर्टेबल केस 1 … 5: एक्सटेंशन की अनुमति देता है जिसे पोर्टेबल कोड को टालना चाहिए।

नहीं। डिफ़ॉल्ट केस कहीं भी हो सकता है; यह तभी चलता है जब कोई लेबल मेल नहीं खाता। अंतिम स्थान केवल एक परंपरा है।

हां, लेकिन केस बॉडी को ब्रेसेस में लपेटें; अन्यथा लेबल के बाद की घोषणा कंपाइलर त्रुटियों को जन्म दे सकती है।

जी हां। एआई कोडिंग सहायक स्विच ब्लॉक तैयार करते हैं, प्रत्येक ब्रेक जोड़ते हैं और अनजाने में हुए फॉलथ्रू को चिह्नित करते हैं। उत्पन्न लॉजिक की हमेशा समीक्षा करें।

गिटहब कोपिलॉट यह केस लेबल को स्वतः पूर्ण करता है, ब्रेक स्टेटमेंट सम्मिलित करता है, और लंबी इफ-एल्स श्रृंखलाओं को टिप्पणी से स्विच में परिवर्तित करता है।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: