3

私はC ++の初心者であり、ユーザーの選択を受け入れてそれに応じて動作するプログラムを作成しています...私の唯一の問題は、ユーザーが大文字の選択を入力したときです...プログラムはそれを間違った選択として扱います... e' は数字を入力するための選択肢でした..ユーザーが「E」を入力した場合、プログラムは「数字を入力してください」というメッセージを表示しません..どうすれば修正できますか? 私は最善を尽くしましたが、動作させることができません..ああ、どうすればSwitchケースに大文字を追加できますか? これは、ユーザーの選択を受け入れ、それに従って行動するコードの部分です。

 #include <iostream>
 #include <cstring>
 using namespace std;

 int main(){

 char choice ;

 for(;;){
    do{
      cout << endl ;
      cout << "(e)nter." << endl ;
      cout << "(d)isplay." << endl;
      cout << "(u)pdate." << endl ;
      cout << "(r)eset. " << endl;
      cout << "(q)uit." << endl;
      cout << endl;
      cout << "Choose one : " ;
      cin >> choice ;

      if( !strchr("edurq",choice) && (choice>=97&&choice<=122) ){
         cout << "Enter e,d,u or q " << endl;}

      else if( !strchr("EDURQ",choice) && (choice<97&&choice>122) ){
         cout << "Enter E,D,U or Q " << endl;}

    }while( !strchr("edurqEDURQ",choice) );

 switch (choice) {
     case 'e' : enter(); break ;
     case 'd' : display(); break ;
     case 'u': update() ; break ;
     case 'r' : reset() ;break;
     case 'q' : return 0;
    }

  }
} 
4

5 に答える 5

5

一致する switch ステートメントのケースで中断しない場合は、次のステートメントに進みます。大文字を小文字の選択肢の前に置くと、失敗します。

switch (choice) {
     case 'E' :
     case 'e' : enter(); break ;
     case 'D' :
     case 'd' : display(); break ;
     case 'U' :
     case 'u': update() ; break ;
     case 'R' :
     case 'r' : reset() ;break;
     case 'Q' :
     case 'q' : return 0;
    }

もう 1 つのオプションは、文字列関数をユーザー入力に適用して小文字に変更することです。この場合、既存の switch ステートメントが機能します。

于 2010-02-17T17:06:26.673 に答える
0

大文字と小文字は異なる文字コードを使用します。そのため、スイッチで小文字のみを使用すると、1 つのタイプのケースのみをテストすることになります。

他の例のように、switch ステートメントのテストを改善するか、choice文字を小文字に変換する必要があります。このようにして、スイッチ テストに予想されるケースを提供していることを確認します。

于 2010-02-17T17:10:41.813 に答える
0

これは、case ステートメントでフォールスルーを使用する絶好の機会です。

switch (choice)
{
    case 'E':
    case 'e':
        enter();
        break;
    // etc.
}
于 2010-02-17T17:06:23.633 に答える
-2

ハックする

switch (choice | 0x20) {
    ...
于 2010-02-17T17:25:51.097 に答える