中断语句break、continue、return、exit和goto的区别
1、continue语句
continue语句是这5种结束循环的⽅式中最特殊的,因为它并没有真的退出循环,⽽是只结束本次循环体的执⾏,所以在使⽤continue的时候要注意这⼀点。
下图为各种循环结构中continue语句的使⽤。
1、for循环中,⾸先执⾏表达式1(注意表达式1在整个循环中仅执⾏⼀次),接着执⾏表达式2,如果满⾜条件,那么执⾏循环体,如果在循环体中执⾏了continue语句,就跳转到表达式3处执⾏,接着进⾏下⼀次循环,执⾏表达式2,看是否满⾜条件;
2、while循环中,如果执⾏了continue语句,那么就直接跳转到表达式处,开始下⼀次的循环判断;
3、do while循环体中如果执⾏了continue语句,那么就跳转到表达式处进⾏下⼀次的循环判断。
4、不可作⽤于switch语句.
2、break语句
break语句的使⽤场合主要是switch语句和循环结构。
1、在循环结构中使⽤break语句,如果执⾏了break语句,那么就退出循环,接着执⾏循环结构下⾯的第⼀条语句。
2、如果在多重嵌套循环中使⽤break语句,当执⾏break语句的时候,退出的是它所在的循环结构,对外层循环没有任何影响。
3、如果循环结构⾥有switch语句,并且在switch语句中使⽤了break语句,当执⾏switch语句中的break语句时,仅退出switch语句,不会退出外⾯的循环结构。
通过下图,可以很直观地了解break语句的使⽤。
3、 return语句
1、如果是main()函数,那么结束整个程序的运⾏。
2、如果是在⾃定义的函数中执⾏,那么执⾏return之后就返回到函数的调⽤处继续往下执⾏。
4、exit()函数
exit()函数与return语句的最⼤区别在于,调⽤exit()函数将会结束当前进程,同时删除⼦进程所占⽤的内存空间,把返回信息传给⽗进程。当exit()中的参数为0时,表⽰正常退出,其他返回值表⽰⾮正常退出,执⾏exit()函数意味着进程结束;⽽return仅表⽰调⽤堆栈的返回,其作⽤是返回函数值,并且退出当前执⾏的函数体,返回到函数的调⽤处。
在main()函数中, return n和exit(n)是等价的。
下图为exit()函数的使⽤。
#include<bits/stdc++.h>
using namespace std;
int print()
{ int n=0;
printf("使⽤return来结束循环\n");
while(1)
{if(9==n) return n ;
n++;
}
return 0;
}
int main()
{ int ret;
printf("调⽤print()函数之前\n");
ret = print();
printf("print()函数的返回值ret=%d\n",ret); printf("调⽤print()函数之后\n");
return 0;
}#include<bits/stdc++.h>
using namespace std;
int print()
{ int n=0;
printf("使⽤exit()来结束循环\n");
while(1)
{if(9==n) exit(1);
n++;
}
return 0;
}
int main()
{ int ret;
printf("调⽤print()函数之前\n");
ret = print();
printf("print()函数的返回值ret=%d\n",ret); printf("调⽤print()函数之后\n");
return 0;
}
运⾏结果:运⾏结果:调⽤print()函数之前
使⽤return来结束循环print()函数的返回值ret=9调⽤print()函数之后调⽤print()函数之前使⽤exit来结束循环
通过以下两段代码对return语句和exit()函数进⾏简单的对⽐:
#include<bits/stdc++.h> using namespace std; int main()
{ int i = 5,n = 0;
while(i--)
{ if(i == 3) continue; else if(i == 1) n = 6; }
n = n + 5;
printf("i=%d\n",i);
printf("n=%d\n",n);
return 0;
}#include<bits/stdc++.h>
using namespace std;
int main()
{ int i = 5,n = 0;
while(i--)
{ if(i == 3) break;
else if(i == 1) n = 6;
}
n = n + 5;
printf("i=%d\n",i);
printf("n=%d\n",n);
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int main()
{ int i = 5,n = 0;
while(i--)
{ if(i == 3) return;
else if(i == 1) n = 6;
}
n = n + 5;
printf("i=%d\n",i);
printf("n=%d\n",n);
return 0;
}
运⾏结果:运⾏结果:运⾏结果:
i = -1 n = 11i = 3
n = 5
没有结果
通过以下两段代码对continue语句和break return进⾏简单的对⽐:
当运⾏return时,没有结果,说明当执⾏i==3是已经带出主函数,不会执⾏下⾯的语句。
5、⽆条件跳转语句 goto
在c++中有⼀个很特别的⽆条件跳转语句,goto,可以跳离⽬前的指令,直接到达设定的标志的语句前,
goto 语句标号由⼀个有效地标识符和符号";"组成,其中,标识符的命名规则与变量名称相同,即由字母、数字和下划线组成,且第⼀个字符必须是字母或下划线。执⾏goto语句后,程序就会跳转到语句标号处,并执⾏其后的语句。
其语法如下
……
goto 标志;
……
标志: 其它语句;
1、goto 语句可⽤于跳出深嵌套循环
#include<bits/stdc++.h>
using namespace std;
int main()
{for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
for(int k=0;k<10;k++)
{ cout<<i*j*k<<" ";
if(216==i*j*k)
goto part2;//break是跳不出多重循环的
}
cout<<"此处被省略"<<endl;
part2:
cout<<"part2"<<endl;
}
运⾏结果:
switch语句必须使用break吗2、goto语句可以往后跳,也可以往前跳,且⼀直往前执⾏.
#include<bits/stdc++.h>
using namespace std;
int main()
{ int x,sum=0;
//定义标号L1
L1: cout<<"x=";
cin>>x;
if (x==-1)
goto L2; //当⽤户输⼊-1时,转到L2语句处
else
sum+=x;
goto L1; //只要⽤户没有输⼊-1,则转到L1语句处,程序⼀直将⽤户的输⼊默默地累加到变量sum中。 //定义标号L2
L2: cout<<"sum="<<sum<<endl;//⼀旦转到L2,将输出累计结果,程序运⾏结束。
system("pause");
}
输⼊:1 2 3
运⾏结果:
3、也可以跳出switch,或者在case之间进⾏跳转
#include<bits/stdc++.h>
using namespace std;
int main()
{ char a;
L1:
cout<<"请输⼊⼀个字符"<<endl;
cin>>a;
switch(a)
{ case 'a':
cout<<"case a"<<endl;
goto L1;
//break;
L2:
case 'b':
cout<<"case b"<<endl;
break;
case 'c':
cout<<"case c"<<endl;
// break;
goto L2;
default:
break;
}
}
输⼊: a c
运⾏结果:
4、goto只能在函数体内跳转,不能跳到函数体外的函数。即goto有局部作⽤域,需要在同⼀个栈内。
5、goto是要跳转到标志后的语句,如果跳转标志后没有语句,就会出错。
6、goto语句不能跨越同⼀个区块内的变量声明。
7、goto语句与if条件语句连⽤,但是,goto语句在给程序带来灵活性的同时,也会使得使程序结构层次不清,⽽且不易读,所以要合理运⽤该语句。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论