首先,我向用户显示一个菜单,供他们选择。 一旦他们做出选择,就会执行一些代码,我想再次向他们展示相同的菜单,这样他们就可以做出不同的选择。
到目前为止,这是我的代码:
//call the menu function and put it in a variable which will be used in the switch case statements
menu_selection = main_menu();
condition_main = true;
while (condition_main) {
switch (menu_selection) {
case 1: display(primes);
menu_selection = main_menu();
case 2: display(fibos);
menu_selection = main_menu();
case 3: display(primes_and_fibos);
menu_selection = main_menu();
case 4: display(primes_not_fibos);
menu_selection = main_menu();
case 5: display(fibos_not_primes);
menu_selection = main_menu();
case 6: search();
menu_selection = main_menu();
case 7: condition_main = false;
return 0; //this exits the program
default: cout << "\nThat is an invalid option. Please try again.\n\n";
}
}
当我运行该程序时,似乎正在发生的事情是,如果我选择选项1,它将执行代码并再次显示菜单但如果我再次选择选项1,它将运行为选项2设计的代码我也尝试过do while循环,根本没有使用循环,似乎没有任何工作。感谢任何帮助。谢谢。
答案 0 :(得分:3)
我同意,缺席了。你可能想要考虑更像这样的代码结构:(我的格式不是很好,因为我是为了紧凑)
do {
menu_selection = main_menu();
switch (menu_selection) {
case 1 : display(primes); break;
case 2 : display(fibos); break;
case 3 : display(primes_and_fibos); break;
case 4 : display(primes_not_fibos); break;
case 5 : display(fibos_not_primes); break;
case 6 : search(); break;
case 7 : break;
default: cout << "\nThat is an invalid option. Please try again.\n\n";
} while (condition_main != 7);
return 0;
(当然,格式化你喜欢的方式。)这只有一次调用菜单功能,使维护更容易。 return
也在函数的末尾,大多数人都希望找到它。
答案 1 :(得分:2)
每个案例都需要休息,除非你希望有一个条件落到下一个:
switch (menu_selection) {
case 1: display(primes);
menu_selection = main_menu();
break ;
case 2: display(fibos);
menu_selection = main_menu();
break ;
case 3: display(primes_and_fibos);
menu_selection = main_menu();
break ;
case 4: display(primes_not_fibos);
menu_selection = main_menu();
break ;
case 5: display(fibos_not_primes);
menu_selection = main_menu();
break ;
case 6: search();
menu_selection = main_menu();
break ;
case 7: condition_main = false;
return 0; //this exits the program
default: cout << "\nThat is an invalid option. Please try again.\n\n";
break ;
}
此reference有更多switch
个例子,也涵盖了不断下降的情况。
正如史蒂夫所说,在return
陈述之后获得while
可能更有意义。这将是预期的控制流程,并且很可能也更容易维护。将main_menu
调用移出循环也会使代码更容易在以后更改。
答案 2 :(得分:0)
添加break
将“解决”问题。
但是,最好将代码分开以便于测试。你可能已经意识到了这个问题。
分开您的输入和处理代码:
bool handleSelection(int menu_selection) {
switch (menu_selection) {
case 1: display(primes);
case 2: display(fibos);
case 3: display(primes_and_fibos);
case 4: display(primes_not_fibos);
case 5: display(fibos_not_primes);
case 6: search();
case 7: return false;
default: cout << "\nThat is an invalid option. Please try again.\n\n";
}
return true;
}
void pump() {
int menu_selection = main_menu();
while(handleSelection(menu_selection)) {
menu_selection = main_menu();
}
}
int main() {
//pump();
handleSelection(3);
}
你也应该将输出代码分开(“这是一个无效的选项。请再试一次”),但我认为我没有这样做我的观点。
答案 3 :(得分:0)
boolean condition = true;
while(condition==true){
System.out.println("Press Number \n 1 for check prime \n 2 for exit");
Scanner scannerOption = new Scanner(System.in);
int option = scannerOption.nextInt();
switch (option){
case 1:
checkPrime();
break;
case 2:
condition = false;
break;
default:
System.out.println("Wrong Enter plz try again");
}
}