1

"a" のような文字のユーザー キーを使用すると、無限ループが発生します。デフォルトでは機能しません。

無限ループの代わりにエラーメッセージを出力するように例外処理を行うにはどうすればよいですか。

ありがとう!

以下は私のコードです:

done=false;
do
{
cout << "Please select the department: " << endl;
cout << "1. Admin " << endl;
cout << "2. HR " << endl;
cout << "3. Normal " << endl;
cout << "4. Back to Main Menu " << endl;
cout << "Selection: ";
cin >> choice;



switch (choice) {
  case 1:
      department_selection = "admin";
    done=true;
    break;
  case 2:
      department_selection = "hr";
    done=true;
    break;
  case 3:
      department_selection = "normal";
    done=true;
    break;
  case 4:
      selection = "hr_menu";
    done=true;
    break;
  default:
    cout << "Invalid selection - Please input 1 to 3 only.";
    done=false;
        }
}while(done!=true);
4

1 に答える 1

3

問題は switch ステートメントではなく、入力操作が実際に成功したかどうかを確認していないという事実です。ブール値のコンテキストでは常に入力操作を使用します。

int choice = 0;
while (!(cin >> choice) && (choice < 1 || choice > 4)) {
    cout << "Invalid selection - Please input 1 to 3 only.\n";
    // reset error flags
    cin.clear();
    // throw away garbage input
    cin.ignore(numeric_limits<streamsize>::max(), '\n');

    // the above two statements prevent infinite loop due to
    // bad stream state
}

// proceed to switch statement

numeric_limitsテンプレートは<limits>ヘッダーにあります。

于 2012-08-19T16:53:00.083 に答える