C ++开关不能使用2个以上的情况

时间:2014-07-17 12:56:29

标签: c++ input switch-statement

我正在学习C ++,对新手问题感到抱歉 我正在从S. Prata的书中做练习。我目前正在使用6.4 我写的代码是:

#include <iostream>
using namespace std;
void showmenu();
void request();
const int strsize = 20;
const int templeSize = 5;

struct temple {
    char name[strsize];
    char job[strsize];
    char psd[strsize];
    int preference;
};

int main(){
    temple members[templeSize] = {
        {"Alan", "spy", "Kret", 0},
        {"Bruce", "engi", "Mech", 2},
        {"Zac", "engi", "Robot", 0},
        {"Kevin", "teacher", "Kid", 1},
        {"Maverick", "spy", "Shadow", 2}
    };

    char choice;
    showmenu();
    request();
    cin >> choice;
    while (choice != 'q'){
        switch(choice){
            case 'a' : for(int i; i< templeSize; i++)
                           cout << members[i].name << endl;
                       break;
            case 'b' : for(int i; i< templeSize; i++)
                           cout << members[i].job << endl;
                       break;
            case 'c' : for(int i; i< templeSize; i++)
                           cout << members[i].psd << endl;
                       break;
            case 'd' : for(int i; i < templeSize;i++){
                           switch(members[i].preference){
                                case 0: cout << members[i].name; break;
                                case 1: cout << members[i].job; break;
                                case 2: cout << members[i].psd; break;
                            }
                        }

            default :   request();
        }

        showmenu();
        cin >> choice;
    }

    cout << "\nBye!\n";
    return 0;
}

void request(){
    cout << "Choose one option:\n";
}

void showmenu(){
    cout << "a. names          b. jobs\n"
            "c. psds    d. preferences\n"
            "q. Quit\n";
}

我不知道这有什么问题。代码正在编译(我使用代码:: blocks),但仅适用于案例&#39; a&#39;和&#39; b&#39;。当我输入&#39; c&#39;或者&#39; d&#39;它只是再次显示菜单。如果我不止一次选择a / b,则相同 我通过谷歌找到了其他解决方案,但我真的想知道我的代码有什么问题。

2 个答案:

答案 0 :(得分:8)

i未在任何for case语句中初始化

答案 1 :(得分:5)

您在switch语句之外调用showmenu()。所以无论输入什么,你都会离开开关并调用函数。

switch(choice){
    ...
}
showmenu();
...