c语言flag跳出循环,四种方法跳出多层循环(return goto flag try)

四种方法跳出多层循环(return goto flag try)

由于最近有人询问如何跳出多层循环的问题,小殇今天就给大家带来四种方法跳出多层循环。

实践出真知,先来给大家举一个简单的程序。观察下面这个程序,这是随手写的一个两层for循环嵌套,一旦发现a,i,j相加等于9的时候就跳出两层循环输出数字,但是下面的程序肯定是不行的,因为for只能跳出一层循环,这样就会出现两种运行结果。不符合我们的要求。

#include

using namespace std;

int main()

{

int a=0;

for(int i=0;i<= 5;i++)

for (int j=0;j<= 5; j++)

{

a++;

if (a + i + j == 9)

{ cout << a << i << j<

}

system("pause");

return 0;

}

来看看第一种解决方法,直接使用return ,不过这种情况只适合特别特别小的程序或者函数了,如果是一个大的项目,就感觉挺不给力的。

#include

using namespace std;

int main()

{

int a=0;

for(int i=0;i<= 5;i++)

for (int j=0;j<= 5; j++)

{

a++;

if (a + i + j == 9)

{

cout << a << i << j << endl;

system("pause");

return 0;

}

}

}

来看看第二种方法,设置一个判断符进行判断。设置一个flag初始化为1,然后在每层循环的时候判断条件都&&flag一下,在需要跳出的地方置flag=0就可以了。

#include

using namespace std;

int main()

{

int a=0;

bool flag = 1;

for(int i=0;i<= 5&&flag;i++)

for (int j=0;j<= 5&&flag; j++)

{

a++;

if (a + i + j == 9)

{

cout << a << i << j << endl;

flag = 0;

}

}

system("pause");

return 0;

}

第三种方法,当循环达到多层,很多人就懒得&&flag了,那么我们的goto语句就出手了。goto语句应该很多人都熟悉但是都没用使用过,因为在大学的C语言学习中很多老师是不教授goto语句的,因为在结构化程序设计中一般不主张使用goto语句, 以免造成程序流程的混乱,使理解和调试程序都产生困难。但是存在的就是合理的,goto语句在很多时候都能很方便简洁的完成程序的功能,所以希望大家还是能够掌握这么一种技巧,能避免goto语句可以尽量避免,但是再一些多层for嵌套的时候还是该出手时就出手吧。

在判断条件里写一个goto语句,在外面写出标示符。然后就顺利解决了多层跳出的问题。

#include

using namespace std;

int main()

{

int a=0;

for(int i=0;i<= 5;i++)

for (int j=0;j<= 5; j++)

{

a++;

if (a + i + j == 9)

{

cout << a << i << j << endl;

goto zhao;

}

}

zhao:

system("pause");

return 0;

}

第四种方法,有木有惊呆的感觉,使用try、throw和catch来完成这个功能,当执行到需要跳出的时候,throw exception();即抛出一个异常,在下面就可以catch (const exception){},即接收这个异常,这样就跳出了整个循环体,不过这种方法不建议经常使用,因为给很多人带来了代码阅读的压力,还是使用上述二三种方法比较好。

#include

using namespace std;

int main()

{

int a=0;

try

{

for (int i = 0; i <= 5; i++)

for (int j = 0; j <= 5; j++)

{

a++;

if (a + i + j == 9)

{

cout << a << i << j << endl; throw exception();

}

}

}

catch (const exception){}

system("pause");

return 0;

}

本文纯属科普,是小殇的第三篇博客,也是比较浅显简单的一篇博客,希望大家能够喜欢。也希望大家有建议疑问可以留贴提问,也可以发送邮件到[email protected]。最后,送给大家一句话:

你还有很多未完成的梦,你有什么理由停下脚步。

你可能感兴趣的:(c语言flag跳出循环)