37

コンソールアプリをswitch作成し、ステートメントを使用してシンプルなメニューシステムを作成しています。ユーザー入力は、画面上に大文字で表示される単一の文字の形式です。ただし、プログラムで小文字と大文字の両方を受け入れる必要があります。

ステートメントは定数との比較に使用されることを理解しswitchていますが、次のようなことは可能ですか?

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

これが不可能な場合、回避策はありますか?私は本当にコードを繰り返したくありません。

4

7 に答える 7

63

こちらです:

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

そのトピックの詳細:http: //en.wikipedia.org/wiki/Switch_statement#C.2C_C.2B.2B.2C_Java.2C_PHP.2C_ActionScript.2C_JavaScript

于 2011-01-16T11:20:22.050 に答える
26

このために一般的に受け入れられている構文は次のとおりです。

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

すなわち:がないためbreak、プログラムの実行は次のブロックにカスケードされます。これはしばしば「フォールスルー」と呼ばれます。

そうは言っても、もちろん、この場合、toupper/tolowerを介して'menuChoice'変数のケースを単純に正規化することができます。

于 2011-01-16T11:20:40.813 に答える
4

'q' || 'Q'結果はbool型の結果(true )になり、switch条件( char )で使用される整数型にプロモートされます-値1を与えますコンパイラが同じ値(1)を複数のラベルで使用することを許可した場合、switchステートメントの実行中menuChoiceに比較されますいずれの場合も値1になります。値menuChoiceが1の場合、最初のケースラベルの下のコードが実行されます。

したがって、ここで提案される回答では、各ケースラベルの整数値として文字定数(char型)を使用します。

于 2011-01-16T12:02:57.510 に答える
3

使用tolower()してください、これが私の男です:


概要# includectype.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()

于 2011-01-16T11:24:51.937 に答える
3

switchステートメントを入力する前にvarのfncを下げることができます(そして、編集可能性の理由からそうすべきです)。

于 2011-01-16T11:26:21.567 に答える
2
switch (toupper(choice))
{
  case 'Q':...
}

...またはそれ以下。

于 2011-01-16T11:23:51.020 に答える
2

もし、するなら

case('s' || 'S'):
    // some code
default:
    // some code

sとは両方ともS無視され、これらの文字を入力するたびにデフォルトのコードが実行されます。だからあなたは使用することを決めることができます

case 's':
case 'S':
    // some code

また

switch(toupper(choice){
    case 'S':
        // some code.

toupperを含める必要がありますctype.h

于 2019-08-02T17:28:02.080 に答える