2.4 转向语句
转向语句是程序的流程控制的补充机制。C++的转向语句主要有:break、continue、return和goto语句。
1.break语句
break语句的作用是,无条件地结束switch语句或循环语句,包括while、do_while和for语句的执行,转向执行语句块的后续语句。语句形式如下:
break;
2.continue语句
continue语句用于循环体中,终止当前一次循环,不执行continue的后续语句,而转向循环入口继续执行。语句形式如下:
continue;
例如,若输入10个非数字字符,则使用continue语句编写的程序如下:
i = 1; while (i<=10) { c=getche(); if('0'<=c&&c<='9') //若c为数字 continue; //则不执行i++ i++; }
如果c的值是数字字符,则continue语句使程序控制跳过后续的i++,转回while入口,开始下一趟循环。
break语句与continue语句的区别如图2.10所示。
图2.10 break语句与continue语句的区别
【例2-27】break语句与continue语句的测试。
本例程序中,第一个for循环,当i为奇数时,if语句执行continue运行,不作输出,转向下一趟循环,因此输出10~20之间的所有偶数。第2个for循环,i的初始值为10,不执行break语句,输出10;但到了第2趟循环时,i的值等于11,满足if语句的条件,执行break语句,终止循环语句,结束程序。
#include<iostream> using namespace std;
int main() { int i; for(i=10; i<=20; i++) { if(i%2) //若i为奇数 continue; //转向下一趟循环 cout<<i<<" "; } cout << endl; for(i=10; i<=20; i++) { if(i%2) //若i为奇数 break; //终止循环 cout<<i<<" "; } }
程序运行结果:
10 12 14 16 18 20 10
3.return语句
return语句用于返回表达式的值,把控制权返回调用点,中断函数的执行。一般语句形式为:
return [表达式];
详见3.2.4节。
4.goto语句
goto语句通常称为无条件转向语句,它与标号语句配合使用,一般语句形式为:
goto 标号; 标号 : 语句;
其中,“标号”是用户定义标识符。
标号语句是指在任意语句(包括空语句)之前冠以“标号”和冒号指示的语句,表示 goto语句的转向入口。标号语句本身对程序的正常控制流程没有影响。
goto语句和标号语句要求出现在同一个函数体中,即不能从一个函数转向执行另一个函数体中的语句。
在一个函数体内,可以有多个转向同一“标号”的goto语句,但不能有多个“标号”相同的语句。
例如,以下两个goto语句都转向标号为End的空语句:
{ … goto End; … goto End; … End : ; }
但以下结构编译器无法确定goto语句的转向入口:
{ … goto Who; … Who: …; … Who: …; }
goto语句与条件语句结合,可以构成程序的选择控制和循环控制。
例如,求a、b之中的大值的程序如下:
if(a> b) goto A; goto B; A: max = a; goto C; B: max = b; C: cout<<"max = "<<max<<endl;
又如,求在1~100之间的奇数之和的程序如下:
i=1; s=1; loop: i++; if(i%2) s+=i; if(i<=100) goto loop; cout << "s = "<< s << endl;
以上程序可以用C++的 if_else语句和循环语句实现。在程序中滥用goto语句将降低程序的可读性和可维护性。在不破坏程序基本流程控制的情况下,可以适当地使用goto语句实现必要的跳转。