【问题标题】:c++ continue versus breakC++ 继续与中断
【发布时间】:2011-09-16 02:58:47
【问题描述】:

“继续”或“中断”之后会执行哪个语句?

for(int i = 0; i < count; ++i)
 {
     // statement1                                                                                                                                                                                                                          
     for(int j = 0; j < count; ++j)
     {
         //statement2                                                                                                                                                                                                                       
         if(someTest)
             continue;
     }
     //statement3                                                                                                                                                                                                                           
 }

for(int i = 0; i < count; ++i)
 {   
     // statement1                                                                                                                                                                                                                          
     for(int j = 0; j < count; ++j)
     {   
         //statement2                                                                                                                                                                                                                       
         if(someTest)
             break;
     }
     //statement3                                                                                                                                                                                                                           
 }

【问题讨论】:

  • 你不能通过简单的调试/跟踪来弄清楚吗?
  • 很容易检查。你有编译器吗?
  • 嗯,没错.. 只是有时候,抓住概念比测试更好
  • 这闻起来像家庭作业......如果不是,你还是应该回到基础,找一本好书或教程阅读。这是一个非常基本的问题,所有教程都解决了。
  • 这不是家庭作业,也许我的书没那么好。 :(

标签: c++ break continue


【解决方案1】:

Continue 直接跳转到最内层循环的顶部,将执行每次迭代代码和连续性检查(for 循环的第 3 和 2 节)。

Break 直接跳到最内层循环之后,不做任何更改。

可能更容易想到前者跳到最内层循环的右大括号,而后者跳过它。

【讨论】:

  • 抱歉,-1 因为没有真正回答这个问题,在那个“继续跳转......增加计数器”中,但这并没有描述下一步 - 重新测试条件,并且确定语句 2 或 3 是否执行。说清楚似乎太明显了,但是当有关于 break and continue 的问题时,这些事情就不能被视为理所当然。 :-/.
  • @paxdiablo 感谢您的编辑。它增加了相当多的清晰度。
【解决方案2】:

继续:++j 然后如果j &lt; count 然后statement2 否则statement3

休息:statement3

【讨论】:

  • 对于第一种情况:不完全是。 ++j之后,会进行循环测试(j
【解决方案3】:

Continue:视情况而定。 continue 语句将执行 for 循环的“增量”部分,然后是“测试”部分,然后决定是执行下一次迭代还是离开循环。 所以它可能是语句 2 或 3。

Break:声明 3。

顺便说一句,这是作业吗?

【讨论】:

    【解决方案4】:

    statement2 将在 continue 之后执行,因为循环不在最后一次迭代中。

    statement3 将在 break 后执行。

    'continue'(顾名思义)继续循环,同时跳过当前迭代中的其余语句。

    'break' 中断并退出循环。

    【讨论】:

      【解决方案5】:

      continue 结束当前迭代,实际上等同于:

      for(int i = 0; i < count; ++i)
       {
           // statement1                                                                                                                                                                                                                          
           for(int j = 0; j < count; ++j)
           {
               //statement2                                                                                                                                                                                                                       
               if(someTest)
                   goto end_of_loop;
      end_of_loop:
           }
           //statement3                                                                                                                                                                                                                           
       }
      

      break 退出循环:

      for(int i = 0; i < count; ++i)
       {   
           // statement1                                                                                                                                                                                                                          
           for(int j = 0; j < count; ++j)
           {   
               //statement2                                                                                                                                                                                                                       
               if(someTest)
                   goto after_loop;
           }
      after_loop:
           //statement3                                                                                                                                                                                                                           
       }
      

      【讨论】:

      • +1 一种可能易于理解的解释方式,但如果测试后循环中有一些代码会更清楚(我知道 - 不是你的错,只是方式问题是)。
      【解决方案6】:
      1. 对于继续,内循环使用 i,j+1 的新 i,j 值执行

      2. 对于 break,innerloop 以 i+1,0 的新 i,j 值执行

      当然,如果边界条件满足

      【讨论】:

        猜你喜欢
        • 2010-09-05
        • 2014-01-05
        • 1970-01-01
        • 2011-03-15
        • 2010-11-27
        • 1970-01-01
        • 2020-04-08
        • 2012-12-08
        相关资源
        最近更新 更多