我们知道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