我正在学习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,也一样.
我通过谷歌找到了其他解决方案,但我真的想知道我的代码有什么问题.
您在switch语句之外调用showmenu().所以无论输入什么,你都会离开开关并调用功能.
switch(choice){
...
}
showmenu();
...
Run Code Online (Sandbox Code Playgroud)