2011-01-16 19 views
17

मैं एक कंसोल ऐप बना रहा हूं और एक साधारण मेनू सिस्टम बनाने के लिए स्विच स्टेटमेंट का उपयोग कर रहा हूं। उपयोगकर्ता इनपुट एक ऐसे वर्ण के रूप में है जो पूंजी के रूप में ऑन-स्क्रीन प्रदर्शित करता है। हालांकि, मैं प्रोग्राम को निचले और ऊपरी-केस वर्णों को स्वीकार करने के लिए चाहता हूं।स्विच स्टेटमेंट - का उपयोग या?

मैं समझता हूँ कि स्विच स्थिरांक के खिलाफ तुलना करने के लिए उपयोग किया जाता है, लेकिन यह इस तरह कुछ करने के लिए संभव है:

switch(menuChoice) { 
    case ('q' || 'Q'): 
     //Some code 
     break; 
    case ('s' || 'S'): 
     //More code 
     break; 
    default: 
     break; 
} 

यदि यह संभव नहीं है, वहाँ एक काम के आसपास के रूप में मैं वास्तव में नहीं करते हैं कोड दोहराना चाहते हैं - जितना छोटा होगा उतना छोटा होगा।

उत्तर

17

इस के लिए आम तौर पर स्वीकार वाक्य रचना है:

switch(menuChoice) { 
    case 'q': 
    case 'Q': 
     //Some code 
     break; 
    case 's': 
    case 'S': 
     //More code 
     break; 
    default: 
     break; 
} 

अर्थात्: एक break की कमी के कारण, कार्यक्रम अगले ब्लॉक में निष्पादन कैस्केड। इसे अक्सर "गिरने" के रूप में जाना जाता है।

उसने कहा, आप निश्चित रूप से टॉपर/टॉल्वर के माध्यम से इस उदाहरण में 'मेनूचॉइस' चर के मामले को सामान्यीकृत कर सकते हैं।

+1

मुझे लगता है कि यह सबसे अच्छा जवाब नहीं होना चाहिए - न केवल इसका समाधान करने के बारे में इसका जवाब है बल्कि यह आपको यह भी बताता है कि आपको एक लिंक क्यों जाना है जो मौजूद हो या न हो। –

2
switch (toupper(choice)) 
{ 
    case 'Q':... 
} 

... या टॉवरर।

+0

बीएस के अनुसार, आपको (पोर्टेबिलिटी कारणों के लिए) उतारने का उपयोग करना चाहिए –

3

बस tolower() उपयोग करते हैं, यहाँ मेरा आदमी है:

SYNOPSIS
# शामिल ctype.h

int toupper(int c); 
    int tolower(int c); 

वर्णन toupper() अपर केस को ग पत्र बदल देता है, अगर संभव हो तो।

tolower() converts the letter c to lower case, if possible. 

    If c is not an unsigned char value, or EOF, the behavior of these 
    functions is undefined. 

वापसी मान दिए गए मान कि परिवर्तित पत्र, या ग की अगर रूपांतरण संभव नहीं था है।

तो अपने उदाहरण में आप switch() साथ कर सकते हैं:

switch(tolower(menuChoice)) { 
    case('q'): 
     // ... 
     break; 
    case('s'): 
     // ... 
     break; 
} 

बेशक आप toupper() और tolower() दोनों का उपयोग कर सकते पूंजी और गैर-राजधानी पत्र के साथ।

3

स्विच स्टेटमेंट दर्ज करने से पहले आप (और अनावश्यकता के कारणों के लिए) कर सकते हैं अपने var पर लागू एफएनसी का उपयोग करें। bool प्रकार परिणाम (सच) में

3

'q' || 'Q' परिणाम जो स्विच हालत (चार) में इस्तेमाल अभिन्न प्रकार के लिए प्रोत्साहित किया जाता है - मान 1 दे रही है।यदि कंपाइलर को एकाधिक लेबल में उपयोग करने के लिए समान मान (1) की अनुमति दी जाती है, तो स्विच कथन menuChoice के निष्पादन के दौरान प्रत्येक मामले में 1 के मान से तुलना की जाएगी। यदि menuChoice के पास मूल्य 1 था तो पहले केस लेबल के तहत कोड निष्पादित किया गया होगा।

इसलिए सुझाव दिया गया है कि यहां प्रत्येक वर्ण लेबल में अभिन्न मूल्य के रूप में वर्ण निरंतर उपयोग करें (जो char प्रकार है)।

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