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