【问题标题】:Exit two for loops if value is true [duplicate]如果值为真,则退出两个 for 循环 [重复]
【发布时间】:2013-10-26 05:59:38
【问题描述】:

我将如何完成以下任务?

for (x=0;x<3;x++) {
    for (y=0;y<3;y++) {
        if (z == 1) {
            // jump out of the two for loops
        }
     }
}
// go on to do other things

如果 z=1,则两个 for 循环都应停止,并应继续执行其他代码。这显然是我试图完成的一个过于简单的例子。 (换句话说,我知道我需要初始化变量等...)

【问题讨论】:

  • 可能使用 goto 或将其放入函数中并使用 return。
  • 这是一种可能适合使用goto 的情况。
  • 此时我正在考虑转到。对于 break 或以下任何解决方案,实际代码有点混乱
  • 绝对是上述问题的副本。不知何故没找到那个。投票结束。

标签: c loops


【解决方案1】:

假设您不需要yx 的值,只需为它们分配可以使两个循环都退出的值:

for (x=0;x<3;x++) 
{
    for (y=0;y<3;y++) 
    {
        if (z == 1) 
        {
           y = 3 ;
           x = 3 ;
        }
     }
}

【讨论】:

  • 假设实际代码在内部循环之后没有做任何有趣的事情
  • @Leeor 是的,在这种情况下应该更加小心。
  • 我实际上是在使用 2 个 for 循环来遍历二维矩阵,所以这实际上行不通。
  • @codedude 这个怎么样:stackoverflow.com/a/19603555/2327831
【解决方案2】:

z 添加到最外层的条件表达式中,然后跳出最内层的循环。

for(x = 0; x < 3 && z != 1; x++) {
    for(y = 0; y < 3; y++) {
        if(z == 1) {
            break;
        }
     }
 }

当然,这涉及到相当多的手动操作 - 在您提供的代码 sn-p 中,z 没有更新。当然,如果这段代码能够工作,它就必须是这样。

【讨论】:

    【解决方案3】:
    for (x=0;x<3;x++) {
        for (y=0;y<3;y++) {
            if (z == 1) {
                // jump out of the two for loops
                x=y=3; //Set the x and y to last+1 iterating value 
                break; // needed to skip over anything outside the if-condition
            }
         }
    }
    

    【讨论】:

    • 在条件块中添加了所需的中断。如果在 if 条件之后有某些东西在做某事(因为他此时想要突破它),则需要它。
    【解决方案4】:

    有flag,然后打破它

    int flag=0;
    
    for(x = 0; x < 3; x++)  
    {
       for(y = 0; y < 3; y++) 
       {
           if(z == 1)
           {
              flag=1;
              break;
           }
       }
       if(flag)
         break;
     }
    

    【讨论】:

    • 如果不将z 作为循环自然终止的一部分,那么将它放在最外层的条件有什么意义?
    • 我没有看到复制粘贴错误
    • 如果你标记的好处是即使你的逻辑很复杂也会打破
    【解决方案5】:

    退出两个循环并避免任何可能遵循最内部循环的任何代码的好方法是将循环放入一个函数中并返回您需要的任何值。

    for (x=0;x<3;x++) 
    {
        for (y=0;y<3;y++) 
        {
            if (z == 1) 
            {
                return RETURN_VALUE
            }
            //avoids this code
        }
        //and this one too
    }
    

    【讨论】:

    • 假设我在 for 循环中有多个 if 语句,例如上面的那个。如果第一个 if 语句为真并且返回了某个值,它会跳过下一个 if 语句吗?
    • 当函数返回值时,函数退出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 2015-10-18
    • 2011-10-02
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    相关资源
    最近更新 更多