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语句实现必要的跳转。