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

0 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";
}
Run Code Online (Sandbox Code Playgroud)

我不知道这有什么问题.代码正在编译(我正在使用代码:: blocks),但仅适用于'a'和'b'的情况.当我输入'c'或'd'时它再次显示菜单.如果我不止一次选择a/b,也一样.
我通过谷歌找到了其他解决方案,但我真的想知道我的代码有什么问题.

小智 8

i 在任何case语句for循环中都没有初始化


And*_*_CS 5

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

switch(choice){
    ...
}
showmenu();
...
Run Code Online (Sandbox Code Playgroud)