2

首先,我向用户显示一个菜单,他们可以从中进行选择。一旦他们做出选择,就会执行一些代码,我想再次向他们展示相同的菜单,以便他们做出不同的选择。

到目前为止,这是我的代码:

//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 循环,根本不使用循环,似乎没有任何效果。任何帮助表示赞赏,谢谢。

4

4 回答 4

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也位于函数的末尾,大多数人都希望在此处找到它。

于 2013-03-11T12:16:33.823 回答
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 ;
} 

这个参考有更多switch的例子,也涵盖了跌倒的情况。

正如史蒂夫建议的那样,在声明return之后添加可能更有意义。while这将是预期的控制流,并且很可能也更容易维护。将main_menu调用从 switch 移到循环中也将使您的代码以后更容易更改。

于 2013-03-11T12:13:20.843 回答
0

添加breaks 将“解决”问题。

但是,最好将代码分开以使其更易于测试。那时你可能已经意识到了这个问题。

将您的输入和处理代码分开:

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);    
}

您可能也应该将输出代码分开(“这是一个无效的选项。请再试一次”),但我认为我没有这样做就说明了我的观点。

于 2013-03-11T12:30:55.730 回答
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");

    }
}
于 2015-12-01T10:56:12.447 回答