在含有多重循环语句的程序中,有时候我们需要在内层循环中直接跳出循环体,而不仅仅是跳出内层循环。
c++中最基本的三个能够跳出循环语句:break语句(跳出本层循环),continue语句(跳出本次循环),return语句(跳出本函数)
以二层循环为例,好多人首先想到的是break,但是break只能跳出到外层循环中,如果在外层循环中直接再次使用break试图跳出,可能会导致外层循环中的语句不被执行就跳出等一些意想不到的结果。continue也是不行的,因为它跳过了本次循环,如果执行完操作后仍然满足循环控制条件,它会继续执行内层循环,否则退出到外层循环,同样不能达到目的。
也会有人想到用return语句,但是return语句直接会结束函数,如果你想在循环结束后还进行其他操作,显然return语句是不能满足要求 。
那么该如何从内层跳出循环体呢?
@1.合理使用goto语句(goto语句百度百科词条)
goto语句改变了程序的执行顺序,使用不当,通常会出现不可预知的错误。但是当要从多重循环中直接跳出时,准确使用goto语句不失为最便捷方法。
有人甚至形象比喻说:“就像楼房着火了,来不及从楼梯一级一级往下走,可从窗口跳出火坑。”
for(......)
for(......)
{
...
if(...) goto next;
}
next:...
...
@2.设置标志位
定义bool型变量,在内层循环中如果遇到要跳出循环体的情况,可以先令变量值为一个bool型数据,然后跳出内层循环。在外层循环中,进行判断,如果成功,则继续跳出。这样不会对外层循环中后面的语句造成影响,也能达到跳出循环体的目的。
bool flag;
for(......)
{
for(......)
{
...
if(...) {flag=1; break;}
}
if(flag==1)
break;
......
}
...
@3.嵌入函数
第一种方法应用不当出错的概率是相当大的,这也是好多人不愿意用goto语句的原因。第二条语句如果遇到多重循环,得写多次,书写麻烦,同时也会造成可读性差的缺点。
如果我们跳出后执行的操作简单,不妨用一个函数代替跳出循环体的意图。
for(......)
{
for(......)
{
...
if(...) {func(...); continue;}
}
......
}
...
各种方法都有它的优劣,在不同的情况下使用不同的方法,做到安全简约即可。