2013-09-26 78 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