一句话记住break、continue、return在各种场景中执行情况

14 篇文章 2 订阅


在这里插入图片描述

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中测试。
记住一句话:

配套使用,循环生效!!


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂的挖掘机

谢谢大家的厚爱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值