我們知道c語言的break語句只能跳出離它最近的一層循環,可是有時候我們需要跳出多層循環 那可怎么辦呢?
比如一個二重循環 在最內層如果某條件成立 我們就可以完成需要的動作 然后退出全部循環,該怎么做呢?
下面提供了幾種跳出多重循環的方法 並不局限於上面的二重循環 例子只是為了提供思路
1. 使用goto
雖然大多數教材和人都建議少使用goto語句,但是goto還是有它存在的道理,比如可以快速跳出多重循環。雅樂網認為在這種情況下goto是最佳的選擇。
for (i = 0; i < MAX1; i++) { for (j = 0; j < MAX2; j++) { if (condition1) { symbol = 1; goto here; } } } here:
評分:★★★★★
2. 寫成函數 return
1 void nestedfor(void) 2 { 3 for (condition1) 4 { 5 for (condition2) 6 { 7 for (condition3) 8 { 9 if (condition) 10 { 11 symbol = 1; 12 return; 13 } 14 } 15 } 16 } 17 }
評分:★★★★
缺點:循環嵌套很多的時候很麻煩,函數參數傳遞也很麻煩
3. 直接修改外層循環條件
1 for (i = 0; i < MAX1; i++) 2 { 3 for (j = 0; j < MAX2; j++) 4 { 5 if (condition1) 6 { 7 symbol = 1; 8 i = INT_MAX; 9 break; 10 } 11 } 12 }
評分:★★★★
缺點:修改了循環控制變量
4. 在外層循環設置判斷條件
內層循環判斷滿足條件修改標志后 外層循環進行判斷
1 for (symbol != 1 && condition1) 2 { 3 for (symbol != 1 && condition2) 4 { 5 for (symbol != 1 && condition3) 6 { 7 if (condition) 8 { 9 symbol = 1; 10 } 11 } 12 } 13 }
評分:★★★
缺點:書寫較為麻煩 未滿足條件的時候有多余的判斷
5. 在大循環后面判斷標志加入break
1 for (condition1) 2 { 3 for (condition2) 4 { 5 for (condition3) 6 { 7 if (condition) 8 { 9 symbol = 1; 10 break; 11 } 12 } 13 if (symbol == 1) 14 break; 15 } 16 if (symbol == 1) 17 break; 18 }
評分:★★★
缺點:同2
版權聲明:
本文由 yalewoo 原創,商業轉載請聯系作者獲得授權。
非商業轉載請注明作者 yalewoo 或 雅樂網 ,並附帶本文鏈接:
http://www.yalewoo.com/how_to_skip_nested_loop.html

