在这里插入图片描述

0 问题

最近在review代码时候,以及在日常修改代码的时候各种bug,尤其是多层复杂循环中,一个小小的brea引发各种逻辑错误,在这里举例子说明各种场景之下循环中的执行情况。

三种基本用法

continue:只是中止本次循环,接着开始下一次循环,常在for循环中出现。
break:则是完全中止循环,常见在swich中搭配。
return:return的功能是结束一个方法,并不是专门用于跳出循环的,无论多少个循环,都会直接结束该方法,不执行后续逻辑


问题:

#include<stdio.h>
int main(void){
    int a =0;
    int b =0;
    for(i=1;i<10;i++){
        switch (i%2) {
            case 0:
                a+=0;
                break;
            case 1:
                a+=1;
                continue;
        }
        b++;
    }
    printf("%d\n",a);
    printf("%d\n",b);
}

最后输出的a=?,b=?

1、return

return一般争议很少,就是直接返回,无论多少循环,在一个函数体中遇到return就直接返回,所以在使用中要注意在return之前要把需要释放的内存或者要做的事情做完,尤其在做前置判断的时候,retrun就会直接返回,如下伪代码程序:


handlesomething
{
  if(a==true) return;
  do something;
  a = false;
  handlesomthing();
}

此时的return 会影响到该函数的自循环,所以在使用的时候要注意。


2、break

代码1:

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    int tmp_a = 0;
    for(int i = 0;i<10;++i)
    {
        switch (tmp_a) {
        case 0:
           if(tmp_a==0)
            {
               qDebug()<<"case 0";
                break;
           }
            tmp_a =1;
            break;
        case 1:
            qDebug()<<"case 1";
            break;
        default:
            qDebug()<<"case 2";
            break;
        }
    }
    return a.exec();
}

代码2:

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    int tmp_a = 0;
    for(int i = 0;i<10;++i)
    {
        switch (tmp_a) {
        case 0:
            for(int j =0;j<10;j++)
            {
                qDebug()<<"case j";
                if(j==0) break;
            }
            tmp_a =1;
            break;
        case 1:
            qDebug()<<"case 1";
            break;
        default:
            qDebug()<<"case 2";
            break;
        }
    }
    return a.exec();
}

问题: 1、代码1运行结果会出现 “case 1” 吗?
2、代码2运行结果会出现 “case 1” 吗?

3、continue

代码1:

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    int tmp_a = 0;
    for(int i = 0;i<10;++i)
    {
        switch (tmp_a) {
        case 0:
           if(tmp_a==0)
            {
               qDebug()<<"case 0";
                continue;
           }
            tmp_a =1;
            break;
        case 1:
            qDebug()<<"case 1";
            break;
        default:
            qDebug()<<"case 2";
            break;
        }
        qDebug()<<"here";
    }
    return a.exec();
}

代码2:

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    int tmp_a = 0;
    for(int i = 0;i<10;++i)
    {
        switch (tmp_a) {
        case 0:
            tmp_a =1;
            continue;
            break;
        case 1:
            qDebug()<<"case 1";
            break;
        default:
            qDebug()<<"case 2";
            break;
        }
    }
    qDebug()<<"temp_a"<<temp_a;
    return a.exec();
}

问题:1、代码1会输出“here”?
2、temp_a = ?

4、总结

如果对于上述的问题,很容易得出答案,那么这三个区别已经用的很好了。
1、由上面return、continue,break定义可以知道,在循环语句中起作用,if只是判断语句,所以在循环语句的if都属于该循环;
2、最好配套使用,break在switch中使用,continue在switch不配套,可以认为是不生效,但是break在for循环中生效;
3、if语句中单独使用 break和retrun是可以的,但是continue是不行的。

以上测试都在QT中测试。
记住一句话:

配套使用,循环生效!!


Logo

加入社区!打开量化的大门,首批课程上线啦!

更多推荐