4

ユーザー入力を求める do while ループがあります。この do while ループ内には、switch ステートメントがあります。デフォルト値が満たされている場合、ユーザーの性別を再度尋ねるループを繰り返すようにするにはどうすればよいですか?

do
    {
        cout << "What is your weight?" << endl;
        cin >> weight;
        cout << "What is your height?" << endl;
        cin >> height;
        cout << "What is your age?" << endl;
        cin >> age;
        cout << "What is your gender?" << endl;
        cin >> gender;

        switch (gender)
        {
            case 'M':
            case 'm':
                cout << endl << Male(weight, height, age);
                break;
            case 'F':
            case 'f':
                cout << endl << Female(weight, height, age);
                break;
            default:
                cout << "What is your gender?";
        }

        cout << "Do you want to continue? (Y/N)" << endl;
        cin >> stopApp;

    } while(toupper(stopApp) == 'Y');
4

4 に答える 4

5

1 つのオプションは、ブール値を設定し、デフォルトのケースに達した場合は true に設定して繰り返すことです。

bool repeat;
do {
  repeat = false;
  //switch statement
  switch {
    default:
      repeat = true;
  }
while(repeat);

繰り返しを適切に使用して、どの質問を繰り返したいかを知ることもできます。

于 2013-09-18T18:50:03.127 に答える
1

break「スイッチケースの終わり」と「ループの終了」の両方を意味するのオーバーロードのおかげで、これgotoは適切な異常な時間の 1 つです。

do
    {
    again:
        cout << "What is your weight?" << endl;
        cin >> weight;
        cout << "What is your height?" << endl;
        cin >> height;
        cout << "What is your age?" << endl;
        cin >> age;
        cout << "What is your gender?" << endl;
        cin >> gender;

        switch (gender)
        {
            case 'M':
            case 'm':
                cout << endl << Male(weight, height, age);
                break;
            case 'F':
            case 'f':
                cout << endl << Female(weight, height, age);
                break;
            default:
                cout << "What is your gender?";
                goto again;
        }

        cout << "Do you want to continue? (Y/N)" << endl;
        cin >> stopApp;

    } while(toupper(stopApp) == 'Y');

参考までに、「男性」と「女性」だけが性別の選択肢ではありません。より大きな目標に応じて、この質問をまったくしないようにするか、ユーザーが応答として任意のフレーズを提供できるようにするか、生物学的性別が実際の関連情報である医療アプリケーションである場合は、質問することをお勧めします。代わりにそのために(また、任意のフレーズの提供を許可します。これもバイナリではないためです)。

于 2013-09-18T18:57:56.377 に答える
1
do
{
    cout << "What is your weight?" << endl;
    cin >> weight;
    cout << "What is your height?" << endl;
    cin >> height;
    cout << "What is your age?" << endl;
    cin >> age;

    bool repeat(true);
    do {
        cout << "What is your gender?" << endl;
        cin >> gender;

        switch (gender)
        {
            case 'M':
            case 'm':
                cout << endl << Male(weight, height, age);
                repeat = false;
                break;
            case 'F':
            case 'f':
                cout << endl << Female(weight, height, age);
                repeat = false;
                break;
            default:
                break;
        }
    } while(repeat)

    cout << "Do you want to continue? (Y/N)" << endl;
    cin >> stopApp;

} while(toupper(stopApp) == 'Y');
于 2013-09-18T19:04:42.260 に答える