0

私はC ++を学ぼうとしていますが、これまでのところ私は正しいですが、単純な問題があり、ケースステートメントで混乱しています.ifステートメントの扱い方を知っていて、それをよく理解しています.以下の私のコードで動作するクラスとメソッドは完全に機能します。これを変更しif statementて置き換える方法を知りたいのですがcase statement、試してみると機能しませんが、これはifステートメントの私のコードです。??caseの代わりに使用したいよろしくお願いしますif

私のコード

void SetType(){
        cout<<"Book SetType"<<endl;
        Choice:
        cout<<"Please Select from the list: \n 1- Technical literature \n 2- Fiction literature \n 3- Textbook"<<endl;
        int i;
        cin >> i;
        if ((i>0)&(i<=3)) {
            if (i==1) Type="Technical literature";
            if (i==2) Type="Fiction literature";
            if (i==3) Type="Textbook";
        }
        else 
        {
            cout << "Erorr you entered a wrong choice" << endl;
            goto Choice;
        }

    }
4

4 に答える 4

4
    switch(i) {
    case 1:
        Type="Technical literature";
        break;
    case 2:
        Type="Fiction literature";
        break;
    case 3:
        Type="Textbook";
        break;
    default:
        cout << "Erorr you entered a wrong choice" << endl;
        goto Choice;
    }
于 2012-11-16T22:08:09.307 に答える
2

A switch/caseはあなたの状況にぴったりです。あなたのケースでは、単一の変数でテストできる離散値がある場合はswitch/を使用します。casei

変数がどのケースとも一致しない場合に備えて、 eachcaseとone を定義することで機能します。/defaultを使用したコードは次のようになります。switchcase

switch(i)
{
    case 1:
        Type="Technical literature";
        break;
    case 2:
        Type="Fiction literature";
        break;
    case 3:
        Type="Textbook";
        break;
    default: 
        cout << "Erorr you entered a wrong choice" << endl;
        goto Choice;
}

breakcaseは、コードが次のコードを実行し続けることを防止するために使用されますcase

goto選択肢の選択に戻るためにa を使用するよりも、より良い方法を学ぶことを強くお勧めします。

これは、使用せずに、「入力ループ」をわずかに改善した新しいバージョンです。goto

void SetType()
{
    cout << "Book SetType" << endl;
    bool validChoice;
    do
    {
        validChoice = true; // Invalidate it in case of wrong choice
        cout << "Please Select from the list: \n 1- Technical literature \n 2- Fiction literature \n 3- Textbook" << endl;
        int i;
        cin >> i;
        switch(i)
        {
        case 1:
            Type="Technical literature";
            break;
        case 2:
            Type="Fiction literature";
            break;
        case 3:
            Type="Textbook";
            break;
        default:
            cout << "Error you entered a wrong choice" << endl;
            validChoice = false;
            cin.clear();
            string dummyLine;
            getline(cin, dummyLine);
        }
    } while(validChoice == false);
}

数値ではない入力を削除するコードを追加しました。そうしないと、cin が失敗し続けます。

于 2012-11-16T22:11:41.060 に答える
0
void SetType(){
        cout<<"Book SetType"<<endl;
        Choice:
        cout<<"Please Select from the list: \n 1- Technical literature \n 2- Fiction literature \n 3- Textbook"<<endl;
        int i;
        cin >> i;
        switch(i)
        {
            case 1:
            {
                Type="Technical literature";
                break;
            }
            case 2:
            {
                Type="Fiction literature";
                break;
            }
            case 3:
            {
                Type="Textbook";
                break;
            }
            default:
            {
                cout << "Erorr you entered a wrong choice" << endl;
                goto Choice;
                break;
            }
        }

    }
于 2012-11-16T22:09:55.307 に答える
0
void SetType(){
    cout<<"Book SetType"<<endl;
Choice:
    cout<<"Please Select from the list: \n 1- Technical literature \n 2- Fiction literature \n 3- Textbook"<<endl;
    int i;
    cin >> i;
    switch(i) {
        case 1: Type="Technical literature"; break;
        case 2: Type="Fiction literature"; break;
        case 3: Type="Textbook"; break;
        default:
            cout << "Erorr you entered a wrong choice" << endl;
            goto Choice;
    }
}

追伸 後藤を見て冷や汗をかき、動悸がする人が多いです。

于 2012-11-16T22:11:44.827 に答える