您的位置:首页 > 编程语言 > C语言/C++

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条系统消息
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: