Theory
Menu वाली समस्या
Marks program अब एक app बनता जा रहा है, और apps में menus होते हैं:
1. View marks
2. View percentage
3. View grade
4. Exit
एक if-else ladder इसे सँभाल सकती है: if choice 1 है... else if 2... पर वह दफ़्तरी काग़ज़ की तरह पढ़ी जाती है, और हर rung choice को फिर से जाँचता है।
"सीधे MERE option पर कूदो" के लिए C एक ख़ास बना औज़ार रखता है: switch-case, अपने 2 मशहूर साथियों break और default के साथ।
Theory
Lift, सीढ़ी नहीं
if-else ladder एक सीढ़ी है: अपनी मंज़िल से नीचे की हर मंज़िल पार कीजिए, हर एक पर एक सवाल का जवाब देते हुए। switch एक lift है: 3 दबाइए, सीधे मंज़िल 3 पर पहुँचिए। पर इस lift की एक ख़ासियत है: इसके दरवाज़े आपके पीछे बंद नहीं होते। जब तक आप stop button (break) न दबाएँ, आप चलते हुए मंज़िल 4 में, फिर 5 में घुस जाते हैं... और जो button किसी मंज़िल से मेल न खाए, उसके लिए lift के पास एक बचाव-landing है: default।
Practical
Marks का menu
#include <stdio.h>
int main() {
int choice, marks = 78;
printf("1.Marks 2.Percentage 3.Grade : ");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("Marks: %d\n", marks);
break;
case 2:
printf("Percentage: %.2f\n", marks * 100.0 / 100);
break;
case 3:
printf("Grade: %c\n", marks >= 70 ? 'A' : 'B');
break;
default:
printf("Invalid choice\n");
}
return 0;
}This example runs in Gri-Learn on the web, where you can edit it and see the output.
Theory
Lift के नियम
switch (expression): expression एक integer type होना चाहिए (int या char; chars चलते हैं क्योंकि वे ASCII numbers हैं)। कभी float नहीं, और कभी string नहीं।case CONSTANT:: labels constants होने चाहिए:case 1:,case 'A':।case marks >= 35:जैसी condition illegal है, switch VALUES से मेल खाता है, ranges नहीं जाँचता।break;: switch से बाहर निकलता है। इसके बिना execution अगले case के code में गिर जाता है, matching रुक जाती है पर चलना नहीं।default:: तब चलता है जब कुछ मेल न खाए, C का "इनमें से कोई नहीं"। जगह लचीली है; अंत में रखना रिवाज है।
Quiz
Menu code में मान लीजिए case 1 में break नहीं था। User 1 डालता है। क्या print होता है?
- Marks AUR Percentage: execution case 2 में उसके break तक गिरता है
- सिर्फ़ Marks: cases अपने आप ख़त्म होते हैं
- Compile error: break ज़रूरी है
- Invalid choice
Show the answer
Marks AUR Percentage: execution case 2 में उसके break तक गिरता है
Matching एक बार होती है, पर break के बिना code अगले case के statements में CHALTA रहता है, सिर्फ़ case 2 के break पर रुकता है। Fall-through legal C है (कभी-कभी जान-बूझकर इस्तेमाल होता है), इसीलिए compiler ख़ामोश रहता है और इसीलिए break-भूलकर-predict-output दुनिया का सबसे दोहराया गया switch सवाल है।
Think first
switch grade क्यों नहीं दे सकता
एक student कोशिश करता है: switch (marks) { case marks >= 70: ... }। यह compile नहीं होगा। Lift वाली तस्वीर से तर्क कीजिए कि KYON, और grading का सही औज़ार बताइए।
Show the answer
Lift के buttons तय मंज़िल नंबर हैं, सवाल नहीं: switch अपनी value की तुलना CONSTANT labels से करता है, इसलिए case marks >= 70: (एक condition, और constant नहीं) illegal है। Ranges सीढ़ी का काम हैं: पिछले lesson की if-else ladder grade देती है; switch menu देता है। Exam के लिए एक line: switch exact values से मेल खाता है; if ranges और conditions सँभालता है।
Watch out
Marks कहाँ कटते हैं
भूले हुए breaks: वही अमर fall-through, predict-output के सवालों में हर case trace कीजिए। float पर switch (switch (percentage)): illegal, सिर्फ़ integer types। conditions को case labels बनाना: illegal, सिर्फ़ constants। और menu programs में default मत भूलिए; examiners invalid-input handling ढूँढते हैं, और वह एक line के आसान marks हैं।
Theory
दोनों selectors में से चुनना
आपकी decision toolkit अब पूरी है: ranges के लिए ladder, menus के लिए switch, और दोनों असली programs में साथ दिखते हैं (एक switch menu जिसके case 3 में grading ladder हो, बिल्कुल आज के code जैसा)। जो दोनों नहीं कर सकते वह है दोहराना: 60 students process करना मतलब 60 बार manual run। दोहराव, structured-programming का तीसरा आकार, आगे आता है: while, do-while और for।
Summary
Key takeaways
- switch सीधे उस case पर कूदता है जो किसी int/char value से मेल खाता है।
- case labels सिर्फ़ constants हैं: न floats, न conditions, न ranges।
- break switch से बाहर निकलता है; इसके बिना execution अगले case में GIR जाता है।
- default बिना-मेल वाली values पकड़ता है, इनमें-से-कोई-नहीं वाली branch।
- switch exact-match menus के लिए; if-else ladder ranges के लिए।
- याद रखने का hook: वह lift जिसके दरवाज़े ख़ुद कभी बंद नहीं होते।