嵌套case,for和if循环的优先级是什么?

时间:2013-07-26 16:31:50

标签: c switch-statement break subroutine

我有一个类似的程序:

switch(x)
{ case 1:

for(i=0; i<10; i++)
{
   if ((i==3) || (i==4) || (i==5) || (i==6) || (i==7))
   {
      if (foobar[i])
         break;    // i am talking about this break
   }
}
...further program
break;   /not this break

如果foobar[i]为真,该程序是否会突破case标签或for循环?

7 个答案:

答案 0 :(得分:12)

break遵循LIFO类型的性质,也就是说,最后一个break将来自第一个控制结构。因此,您选择的break将脱离for循环,而不是case

答案 1 :(得分:5)

for循环。

请参阅:break Statement (C++)

  

break语句结束最近的封闭循环或   出现的条件陈述。控制传递到   结束语句后面的语句,如果有的话。

答案 2 :(得分:2)

break只会突破for循环。如果你有嵌套语句,它只会打破一个级别

答案 3 :(得分:1)

是for循环。休息将起泡,直到找到第一个,一个或一个开关。 所以你可以像这样写你的程序:

switch(x){
    case 1:
        int loopBreaked = 0; //If you want to know if the loop has breaked
        for(int i=0; i<10; i++) {
            if (i <= 7 && i >= 3 && foorbar[i]) {
                loopBreaked = 1;
                break; //breaks the loop
            }
        }
        break; //breaks the switch
}

答案 4 :(得分:0)

怎么样:

for(i=3; i<=7 && !foobar[i]; i++) {}

答案 5 :(得分:0)

为了完整起见,break将突破for do whileswitch类型的最内层语句。没有必要打破if语句,因为简单地结束代码块将完成相同的工作。

答案 6 :(得分:0)

您的break会中断for循环。而您之后使用的break会打破switch。您可以考虑以下代码示例:

for(int i=0;i<len;i++)
{
   for(int j=0;j<len;j++)
   {
     //statements
      break;
    }
//statements
break;
}

内部循环内的break打破内部循环,后面的break语句将破坏外部循环。在您的代码示例中,您注意到的break位于for循环内。因此,for循环将会中断。