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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/houzijushi/article/details/81676086

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

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

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

#include <iostream>
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;
}

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

#include <iostream>
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 <iostream>
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 <iostream>
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 <iostream>
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;
}

原文:https://blog.csdn.net/u010335911/article/details/24270667

猜你喜欢

转载自blog.csdn.net/houzijushi/article/details/81676086