如何循环切换在c ++中再次请求输入的switch-case语句?

时间:2013-03-11 12:08:23

标签: c++ while-loop switch-statement

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

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

//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 个答案:

答案 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");

    }
}