2013-03-11 148 views
1

首先,我向用户显示一个菜单,供用户从中进行选择。 一旦他们做出选择,一些代码被执行,我想再次向他们展示相同的菜单,以便他们可以做出不同的选择。如何在C++中再次请求输入的switch-case语句循环?

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

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

+11

你缺少'break'语句。 – jrok 2013-03-11 12:09:06

回答

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例子,也包括通过个案下降也是如此。

正如史蒂夫建议,也许在while声明后面有return更有意义。这将是预期的控制流量,并且很可能更容易维护。将main_menu呼叫转移到循环中也将使您的代码稍后更易于更改。

+0

将main_menu移入循环是非常好的建议,谢谢。它也帮助我解决了类似的问题。我在case 7中返回0的原因是,我可以告诉程序关闭或将使condition_main = false达到同样的效果吗? – John 2013-03-11 21:51:26

+0

@John是的,如果你用'break'代替'return 0',那么当它返回到'while'循环的顶部'condition_main'将是'false'并且循环将退出。 – 2013-03-12 01:01:57

2

我同意,休息是失踪。你可能要考虑一个代码结构更是这样的:(我的格式是不是很大,因为我要去为紧凑型)

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也是功能的结尾,大多数人希望找到它。

0

添加break s将“解决”问题。

但是,最好分离出代码以便于测试。那么你可能自己已经意识到了这个问题。

独立的输入和你的处理代码:

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

你或许应该分开输出代码,太(“这是一个无效的选项,请重试。”),但我想我已经没有这样做就表明了我的观点。

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

    } 
} 
+0

这不是C++。 – nrussell 2016-02-12 02:46:52