c++开关不工作超过2种情况

C++ switch not working with more than 2 cases

本文关键字:2种 情况 工作 开关 c++      更新时间:2023-10-16

我正在学习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. jobsn"
            "c. psds    d. preferencesn"
            "q. Quitn";
}

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

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

在switch语句之外调用showmenu()。因此,无论输入什么,您都将离开开关并调用函数。

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