while case in case语句(C ++)

时间:2014-12-12 20:59:15

标签: c++

是否有人可以帮助我解决我认为对于熟悉C语言的人来说琐碎的问题。 我有一些代码,但label_start_menu:对我不起作用。 我想要实现的是恢复默认:现在,例如, 3 == 3 while循环工作无限,无法返回默认值:

  switch (counter1) {

  case 1:

    menu_clock();
    delay(2000);

    while(true){

      Serial.println("loop1");
      Serial.println("loop1");
      Serial.println("loop1");

      if(3 == 3)
      {
        break;
       goto label_start_menu;
      }  
    }
    break;

  case 2: 

    menu_media();
    delay(2000);
    break;

  default:
label_start_menu:
    menu_start();
    break;
  }
}

谢谢, ojdas

4 个答案:

答案 0 :(得分:1)

  if(3 == 3)
  {
    break;
    goto label_start_menu;
  }  

goto永远不会被执行,因为break语句会在那里突破你的循环。

我的建议是摆脱goto,并在if语句中调用menu_start(),然后中断,而不是使用goto。

答案 1 :(得分:1)

我不确定您尝试使用while循环确切地做了什么,但是您已经在break;声明前面发表了goto label_start_menu;声明,所以永远不会到达。

更完整的答案:首先绝对不需要goto。你已经在调用另一个功能了。重写整个事情:

switch (counter1)
{
case 1:
    menu_clock();
    delay(2000);
    Serial.println("loop1");
    Serial.println("loop1");
    Serial.println("loop1");
    menu_start();
    break;

case 2: 
    menu_media();
    delay(2000);
    break;

default:
    menu_start();
    break;
}

答案 2 :(得分:0)

休息应该是最后一件事。

另外,为什么要把它放在循环中?这是一个无限循环..只要调用它然后断开就会让你离开开关并且不会继续,所以确保你在休息之前做了所有事情,所以在休息之前放置goto label_start_menu;并删除if声明和其他突破。

如果你想循环它,那么你可以使用其他循环方法..谷歌很棒!

答案 3 :(得分:0)

我要重新发布@40two's answer,因为它恰好触及了goto的使用(除了以同样方式出现的其他缺陷(没有合理的循环中断条件))。

enter image description here

@ 40two:XKCD是一个非常好的洞察力来源,因为你可以阅读它!