2011-01-16 8 views
17

私はコンソールアプリケーションを作成し、switch文を使って簡単なメニューシステムを作成しています。ユーザーの入力は、画面上を首都として表示する1文字の形式です。しかし、私はプログラムが大文字と小文字の両方を受け入れることを望んでいます。Switchステートメント - またはを使用していますか?

は、私は、スイッチは、定数と比較するために使用されていることを理解し、このような何かを行うことが可能です:これが不可能な場合

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、プログラムの欠如によるもの実行は次のブロックにカスケードします。これは「フォールスルー」と呼ばれることがよくあります。

もちろん、このインスタンスのtoupper/tolowerを使って 'menuChoice'変数の大文字を正規化することもできます。

+1

私はこれが上記の答えではなく、最高の答えであるべきだと思います。 それを解決する方法だけでなく、存在しないかもしれないリンクに行く前にそれがなぜあなたに伝えられているかを示します。 –

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

...またはtolower。

+0

B.S.によると、あなたは(携帯性の理由から)tolowerを使うべきです。 –

3

ちょうどtolower()を使用し、ここで私の男です:

SYNOPSIS
の#includeのctype.h

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

説明 のtoupper()大文字に文字cを変換し、可能なら。 変換は不可能であった場合

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. 

戻り値 は、戻り値は、変換された文字、またはCのそれです。

だからあなたの例では、あなたがswitch()ことができます。もちろん

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

を、あなたは資本と非首都文字で、toupper()tolower()の両方を使用することができます。

3

switch文を入力する前に、あなたのvarのtolower fncを使用することができます(また、実行可能性の理由から)。値1を与える - スイッチ条件(チャー)で使用される一体型に昇格さブール型結果()で

3

'q' || 'Q'結果。コンパイラが複数のラベルで同じ値(1)を使用できる場合、スイッチステートメントmenuChoiceの実行中は、いずれの場合も値1と比較されます。 menuChoiceの値が1の場合、最初のケースラベルの下のコードが実行されます。

ここで示唆された答えは、各ケースラベルの整数値として文字定数(タイプchar)を使用しています。

関連する問題