我正在学习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,则相同 我通过谷歌找到了其他解决方案,但我真的想知道我的代码有什么问题。
答案 0 :(得分:8)
i
未在任何for case语句中初始化
答案 1 :(得分:5)
您在switch语句之外调用showmenu()。所以无论输入什么,你都会离开开关并调用函数。
switch(choice){
...
}
showmenu();
...