【问题标题】:What is the priority with nested case, for and if loop?嵌套 case、for 和 if 循环的优先级是什么?
【发布时间】:2013-07-27 00:41:25
【问题描述】:

我有一个类似这样的程序:

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 循环吗?

【问题讨论】:

  • 为什么不自己测试一下呢?
  • 您是否构建了一个测试用例并且对结果感到困惑?这很简单,您可以自己尝试。
  • 什么语言有多个中断选项?是计划吗?
  • @AntP,C++ 不是你可以只测试代码的语言。
  • 编译器将你的程序变成一个解析树。解析树中的所有内容都有一个父节点,除了根节点。 break 语句必须在树的某处有一个父循环。在您的代码中,break 的父级是 for-loop

标签: c switch-statement break subroutine


【解决方案1】:

您的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 循环将中断。

【讨论】:

    【解决方案2】:

    为了完整起见,break 将脱离fordowhileswitch 类型的最里面的语句。无需中断if 语句,因为只需结束代码块即可完成相同的工作。

    【讨论】:

      【解决方案3】:

      怎么样:

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

      【讨论】:

        【解决方案4】:

        break 遵循 LIFO 类型性质,即最后一个 break 将来自第一个控制结构。因此,您选择的 break 会跳出 for 循环,而不是 case

        【讨论】:

          【解决方案5】:

          for 循环。

          请看:break Statement (C++):

          break 语句结束最近的封闭循环的执行或 它出现的条件语句。控制权传递给 结束语句之后的语句(如果有)。

          【讨论】:

            【解决方案6】:

            是for循环。 break 会冒泡,直到找到第一个 for、while 或 switch。 所以你可以这样写你的程序:

            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
            }
            

            【讨论】:

              【解决方案7】:

              break 只会跳出 for 循环。如果你有嵌套语句,它只会突破一层

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2016-12-18
                • 2019-08-23
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2012-01-27
                • 2020-05-18
                • 1970-01-01
                相关资源
                最近更新 更多