2013-09-26 43 views
1

我这里有一个代码,如何摆脱内心的循环,回到父母的循环

for(int i=0;i<5;i++) 
{ 
    for(int j=0;j<5;j++) 
    { 
     //checking some conditions here for true or false 
     if(false) 
     { 
      break out of this for loop; 
     } 
     else if(true) 
     { 
      printf("true"); 
     } 
    } 
} 

我想摆脱内心的循环,并继续与外环。我试图使用break,但控制移出父母的循环也。

任何解决方案?

+3

你确定*使用'break'不起作用吗? –

+5

'break;'should work,'if(false)'永远不会执行,您的条件不正确? – billz

+0

休息应该有效。你确定外部循环是否被破坏,或者它是否会通过并且内部循环的后续调用都被破坏,因此没有输出? –

回答

7

我试图使用break,但控制移出父循环也。

你一定很困惑。 break只打破了最内层的循环/开关,因此也不能也停止了外层循环(除非偶然外层循环处于最后一次迭代,这给了你这种错误印象)。

当你在这样的疑问,您可以通过您的代码步使用调试器,或者至少是插入“跟踪”输出在你的代码,这样就可以验证其实际作用:

for(int i=0;i<5;i++) 
{ 
    printf("outer loop %d\n", i); 
    for(int j=0;j<5;j++) 
    { 
     printf("inner loop %d\n", j); 
     //checking some conditions here for true or false 
     if(false) 
     { 
      printf("breaking out of inner loop\n"); 
      break; 
     } 
     else if(true) 
     { 
      printf("true in inner loop\n"); 
     } 
    } 
    printf("finishing the outer loop %d\n", i); 
} 
0

如果在内部循环中使用break,那么它肯定会将控件移动到外部循环。

我想你可能会错过的是重置你的错误条件出来后的内部循环。

-1

这些都是基于何时想要从内部循环跳出的逻辑。考虑以下步骤。

Do 
    For Int x = 1 To 10 
     Do 
      Break, Break, Break 
     Loop 
    Next x 
Loop 

尝试重新考虑您的程序逻辑并使用标志实现break语句。

如果你愿意,你可以通过使用goto语句从内部循环中突破来克服。

int num[5][5][5]; 

for (int x = 0; x < 5; x++) 
{ 
    for (int y = 0; y < 5; y++) 
    { 
     for (int z = 0; z < 5; z++) 
     { 
      if (num[x][y][z] == 256) 
      { 
       cout << "Number has been found at location: " << x << y << z; 
       //break the three for loops here, it's unnecessary to check any other locations 
       goto finish; 
      } 
     } 
    } 
} 
finish: 
+0

这三次休息是怎么回事? – Shahbaz

+0

@Shahbaz,打破做,做,做。 – Legolas

0

歇只打破了其使用 并顺便说一句,如果条件为假时,将不会执行

+0

对不起,我应该不会写(if)(假)。它在这里造成了一个混乱。但在我的代码中,我认为它是真实的。所以我会检查我错过了什么。 –

+0

@leesei,我如何能让父母for循环在if(some_condition)? –

0

是你的代码是正确的,当你想到是必须的工作循环。 除非你编译了这个并执行另一个。 :-)

1

6.8.6.3 break语句

约束

1 break语句应仅在或作为开关体或环体出现。

语义

2 break语句终止最小包围开关或迭代 语句的执行。

从ISO/IEC 9899报价:TC3

所以,你应该休息的工作,只要你不使用任何预编译的α。

但问题是更

if (false) //will never be executed, as false is ever fals 
{ 
    //code gets never invoked 
} 

这样你就不会打出来,你永远不会调用break;

0

尝试使用标志,并在您的循环条件检查它。

int stop = 0; 

for (int i = 0; !stop && i < 5; ++i) { 
    for (int j = 0; j < 5; ++j) { 
     if (false) { 
      stop = 1; 
      break; 
     } 
     // Condition when true does not need 'else' if breaking. 
    } 
} 
+0

如果你问我,这不像其他例子那么好。代码看起来很难阅读。 – dhein

+0

OP不会**不希望突破外部循环。 – syam

+0

事实上,我没有看到伪代码下面的评论。我得到了“摆脱这个循环”并做出了一个糟糕的假设。我没有意识到休息声明可能很难使用。 – Craig