c语言如何跳出多层循环
2016-03-28 11:06
549 查看
c语言如何跳出多层循环
我们知道c语言的break语句只能跳出离它最近的一层循环,可是有时候我们需要跳出多层循环 那可怎么办呢? 比如一个二重循环 在最内层如果某条件成立 我们就可以完成需要的动作 然后退出全部循环,该怎么做呢? 下面雅乐网提供了几种跳出多重循我们知道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:
1 2 3 4 5 6 7 8 9 10 11 12 | for(i= 0;i <MAX1;i++) { for(j= 0;j <MAX2;j++) { if(condition1) { symbol= 1; gotohere; } } } here: |
2. 写成函数 return
void nestedfor(void){
for (condition1)
{
for (condition2)
{
for (condition3)
{
if (condition)
{
symbol = 1;
return;
}
}
}
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | voidnestedfor(void) { for(condition1) { for(condition2) { for(condition3) { if(condition) { symbol= 1; return; } } } } } |
缺点:循环嵌套很多的时候很麻烦,函数参数传递也很麻烦
3. 直接修改外层循环条件
for (i = 0; i < MAX1; i++){
for (j = 0; j < MAX2; j++)
{
if (condition1)
{
symbol = 1;
i = MAX;
break;
}
}
}
1 2 3 4 5 6 7 8 9 10 11 12 | for(i= 0;i <MAX1;i++) { for(j= 0;j <MAX2;j++) { if(condition1) { symbol= 1; i= MAX; break; } } } |
缺点:修改了循环控制变量
4. 在外层循环设置判断条件
内层循环判断满足条件修改标志后 外层循环进行判断for (symbol != 1 && condition1)
{
for (symbol != 1 && condition2)
{
for (symbol != 1 && condition3)
{
if (condition)
{
symbol = 1;
}
}
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 | for(symbol!= 1&& condition1) { for(symbol!= 1&& condition2) { for(symbol!= 1&& condition3) { if(condition) { symbol= 1; } } } } |
缺点:书写较为麻烦 未满足条件的时候有多余的判断
5. 在大循环后面判断标志加入break
for (condition1){
for (condition2)
{
for (condition3)
{
if (condition)
{
symbol = 1;
}
}
if (symbol == 1)
break;
}
if (symbol == 1)
break;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | for(condition1) { for(condition2) { for(condition3) { if(condition) { symbol= 1; } } if(symbol== 1) break; } if(symbol== 1) break; } |
缺点:同2
声明: 本文由(yalewoo)原创,转载请保留本文链接:http://www.yalewoo.com/how_to_skip_nested_loop.html
你有undefined条新回复
你有undefined条系统消息
相关文章推荐
- c/c++中assert()函数的用法
- c#调用c++ dll 入坑记录
- C++之new、delete 与malloc、free的异同
- C/C++程序题(16-20)
- 【1】C++实现内核链表功能
- 设计模式--责任链模式C++实现
- C语言之指针 到现在还是很模糊 ->
- C++ Primer 5th - 1.5 类
- C++实现开机启动
- c++Primer5,总览与IO库和泛型算法
- c++ 函数返回引用
- leetcode Add Digits 之C语言实现
- leetcode Add Digits 之C++实现
- 设计模式--命令模式C++实现
- leetcode之Nim Game C语言实现
- leetcode之Nim Game C++实现
- leetcode 之Maximum Depth of Binary Tree 用 C语言实现
- 认识Visual C++各个版本
- 结构体大小问题
- c++ 强制类型转换 static_cast dynamic_cast reinterpret_cast和const_