2013-11-26 7 views
11

तो मेरे प्रोफेसर ने हमें एक स्विच स्टेटमेंट बनाने के लिए कहा। हमें प्रोग्राम करने के लिए केवल "स्विच" कथन का उपयोग करने की अनुमति है। वह चाहता है कि हम एक संख्या इनपुट करें और फिर इसे प्रदर्शित करें यदि यह संख्या सीमा पर है और नीचे दिखाए गए अनुसार ब्रीफ़केस संख्या क्या ली जाएगी। अब ... मुझे पता है कि इस प्रकार के कार्यक्रम के लिए आईएफ स्टेटमेंट का उपयोग करना आसान है। केस 1 करना: केस 2: केस 3 ... केस 30 काम करेगा लेकिन नंबर सीमा के कारण बहुत अधिक समय लगेगा।सी - एकाधिक केस संख्याओं के साथ स्विच करें

#include <stdio.h> 
main() 
{ 
     int x; 
     char ch1; 
     printf("Enter a number: "); 
     scanf("%d",&x); 
     switch(x) 
     { 
       case 1://for the first case #1-30 
       case 30: 
         printf("The number you entered is >= 1 and <= 30"); 
         printf("\nTake Briefcase Number 1"); 
         break;   
       case 31://for the second case #31-59 
       case 59: 
         printf("The number you entered is >= 31 and <= 59"); 
         printf("\nTake Briefcase Number 2"); 
         break;     
       case 60://for the third case #60-89 
       case 89: 
         printf("The number you entered is >= 60 and <= 89"); 
         printf("\nTake Briefcase Number 3"); 
         break;     
       case 90://for the fourth case #90-100 
       case 100: 
         printf("The number you entered is >= 90 and <= 100"); 
         printf("\nTake Briefcase Number 4"); 
         break;  
       default: 
        printf("Not in the number range"); 
        break; 

       } 
     getch(); 
     } 

मेरे प्रोफेसर ने हमें बताया कि ऐसा करने के तरीके पर एक छोटा रास्ता है लेकिन हमें यह नहीं बताएगा कि कैसे। आईएफ का उपयोग करके मैं इसे छोटा करने का एकमात्र तरीका सोच सकता हूं लेकिन हमें इसकी अनुमति नहीं है। इस विचार को मैं कैसे कर सकता हूं इस पर कोई विचार?

+0

बस जांचने के लिए, क्या आप वाकई पहला मामला 1 से 30 तक चलाते हैं? और 1 से 2 9 नहीं? –

+3

क्या आप सोच रहे हैं कि 'केस 1: केस 30:' श्रेणी में किसी भी नंबर से मेल खाएगा? यह नहीं होगा – John3136

+0

'केस' लेबल की आपकी पहली जोड़ी केवल 2 मानों को ढूंढती है: 1 और 30; वे 2..2 9 को अनदेखा करते हैं। अगले 'रेंज' के लिए डिट्टो, केवल स्विच का उपयोग करके, आप दर्द की दुनिया में हैं। –

उत्तर

21
जीसीसी और बजना के साथ

, तो आप मामले का उपयोग कर सकते पर्वतमाला, इस तरह:

switch (x){ 

case 1: 
case 2: 
case 3: 
case 4: 
case 5: 
case 6: 
    printf ("The number you entered is >= 1 and <= 6\n"); 
    break; 
} 

:

switch (x){ 

case 1 ... 30: 
    printf ("The number you entered is >= 1 and <= 30\n"); 
    break; 
} 

केवल पार संकलक समाधान इस तरह के मामले में बयान उपयोग करने के लिए है संपादित करें:switch (x/10) के प्रभाव में कुछ का उपयोग करना ऐसा करने का एक और अच्छा तरीका है। जीसीसी केस श्रेणियों का उपयोग करना आसान हो सकता है जब श्रेणियां 10 के अंतर नहीं हैं, लेकिन दूसरी तरफ आपका प्रोफेसर उत्तर के रूप में जीसीसी एक्सटेंशन नहीं ले सकता है।

7

पर्वतमाला संगत कर रहे हैं, तो आप दूर डेटा के कुछ फेंक कर सकते हैं:

switch (x/10) 
{ 
    case 0: 
    case 1: 
    case 2: // x is 0 - 29 
    break ; 

    // etc ... 
} 

नहीं तो आप किनारों के आसपास hackery का एक छोटा सा करना होगा।

+0

+1: अधिक या कम - '(x - 1)/10'' [012] '1..30 के लिए देगा; दोहराएँ। समस्या होगी -8..0 (0 भी दे रहा है)। –

3
Try this ... 

#include <stdio.h> 
#include <stdio.h> 
main() 
{ 
     int x; 
     char ch1; 
     printf("Enter a number: "); 
     scanf("%d",&x); 
     int y=ceil(x/30.0); 
     switch(y) 
     { 

       case 1: 
         printf("The number you entered is >= 1 and <= 30"); 
         printf("\nTake Briefcase Number 1"); 
         break;   

       case 2: 
         printf("The number you entered is >= 31 and <= 60"); 
         printf("\nTake Briefcase Number 2"); 
         break;     

       case 3: 
         printf("The number you entered is >= 61 and <= 90"); 
         printf("\nTake Briefcase Number 3"); 
         break;     

       case 4: 
         printf("The number you entered is >= 91 and <= 100"); 
         printf("\nTake Briefcase Number 4"); 
         break;  
       default: 
        printf("Not in the number range"); 
        break; 

       } 
     getch(); 
     } 
+1

'ceil()' का आपका वर्तमान उपयोग थोड़ा गलत है। आप 'x' के पूर्णांक विभाजन पर' 30' से प्रयास करते हैं, जो पहले से ही पूर्णांक है क्योंकि पूर्णांक विभाजन फर्श है। शायद आपका मतलब 'छत (x/30.0) 'था? –

+0

मेरे उत्तर को संपादित करके परिवर्तन करें .. – uhs

+2

दुर्भाग्यवश मैं इसे स्वयं नहीं कर सकता क्योंकि संपादन 6 वर्णों से कम है। यदि आप इसे स्वयं कर सकते हैं, तो मैं खुशी से इन दोनों टिप्पणियों को हटा दूंगा। –

संबंधित मुद्दे