我们知道c语言的break语句只能跳出离它最近的一层循环,可是有时候我们需要跳出多层循环 那可怎么办呢?
比如一个二重循环 在最内层如果某条件成立 我们就可以完成需要的动作 然后退出全部循环,该怎么做呢?
下面雅乐网提供了几种跳出多重循环的方法 并不局限于上面的二重循环 例子只是为了提供思路
1. 使用goto
虽然大多数教材和人都建议少使用goto语句,但是goto还是有它存在的道理,比如可以快速跳出多重循环。雅乐网认为在这种情况下goto是最佳的选择。
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
;
goto
here
;
}
}
}
here
:
|
评分:★★★★★
2. 写成函数 return
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
void
nestedfor
(
void
)
{
for
(
condition1
)
{
for
(
condition2
)
{
for
(
condition3
)
{
if
(
condition
)
{
symbol
=
1
;
return
;
}
}
}
}
}
|
评分:★★★★
缺点:循环嵌套很多的时候很麻烦,函数参数传递也很麻烦
3. 直接修改外层循环条件
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. 在外层循环设置判断条件
内层循环判断满足条件修改标志后 外层循环进行判断
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
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