2011-11-27 42 views
0

在循環結構,如for,請問break;「知道」時,它的下縮進層次?打破縮進循環結構

例如:

for (i = 0; i < 10; i++) { 
    for (s = 0; s <= i; s++) { 
     if (s == 7) break; 
    } 
} 

請問這個break;停止或只是內部的一個或兩個?

感謝

+3

您正在使用哪種編程語言? – sll

+0

@sll問一個有效的問題,但我從來沒有見過一種語言的語法風格,它會做任何事情,但會破壞內部循環。而且我看到了很多這些語言,到目前爲止,通過C,C++,C#,D,Java,JavaScript等,感覺到語言B的語法影響力。 –

+1

@schnaader:我回滾了你的編輯。它完全不適用於假設OP正在討論C並添加該標籤。有問題的代碼可能很容易成爲Java,JavaScript,C#,D或其他任何其他代碼。 –

回答

2

它只會打破內部循環。

請參考MSDN doccumentation

在循環中,break終止執行最近的包含doforwhile的語句。如果有的話,控制傳遞給終止語句後面的語句。

+0

我們不知道OP是否在使用C,這是由OP編輯問題以外的人員發明的。我不認爲我會使用MSDN作爲C參考,但是... :-) –

+0

@TJCrowder:我看到Q帶有* C標記*,另外,我認爲沒有任何問題在MSDN上的特定鏈接中。不管語言如何,「break」只會終止內部循環。 –

+0

'@ AIs':是的,我想你會看到壞標籤,這就是爲什麼我告訴你OP沒有在任何地方指定C.並同意,我從來沒有見過任何語言,除了打破內部循環之外,沒有任何其他語法。不同意使用MSDN進行C參考,但無論如何,這不是特別重要。 :-) –

1

縮進水平並不重要,在使用讚譽的語言。只有內部循環將被打破。

0

它會停止內在的一個。

0

只是內在的一個。休息會突破一個單一的循環。您需要額外的邏輯才能完全打破嵌套循環,否則如果嵌套循環封裝在函數中,則可以使用返回。

0

只是內在的一個。有些語言可以選擇哪種語言。

3

你還沒說你所使用的語言,但我從來沒有見過那種語法是沒有比打破內環(允許外繼續)以外的任何語言。儘管如此,你還是應該提及你使用的語言! :-)

許多語言與那種語法的支持標籤和直接減免,可用於打破外環。這通常是這樣的:

outer: for (i = 0; i < 10; i++) { 
    inner: for (s = 0; s <= i; s++) { 
     if (s == 7) break outer; 
    } 
} 

(該inner標籤是在這種情況下,可選的,因爲我們還沒有使用過任何東西,我只是包括它的完整性)

這個例子將打破內部外部循環。它在Java,JavaScript和其他可能的應用程序中是有效的;在C語言中,你需要在循環之後添加一個標籤,並且(不寒而慄)一個goto,你可能會更好(可以說總是更好),只是在外部循環檢查內部循環設置時包括某種終止條件。

下面是JavaScript中的一個實例(我使用了更小的數字使其更加明顯):Without the directed break | With the directed break

還要注意的是,在這些語言中,縮進是完全不相干的。此代碼是正是相同的代碼(只是明顯的可讀性):

for (i = 0; i < 10; i++) { 
for (s = 0; s <= i; s++) { 
if (s == 7) break; 
} 
} 

這也是相同的(和大幅的可讀性):

 for (i = 0; i < 10; i++) { 
    for (s = 0; s <= i; s++) { 
if (s == 7) break; 
    } 
     } 

很明顯,你會從來不想這樣做,但重點在於縮進是針對人,而不是編譯器(在具有這種語法風格的語言中)。