7.2.3 多分支结构语句

C程序经常会选择执行多个分支,多分支选择结构共有n个操作,实际上前面介绍的嵌套双分支语句可以实现多分支结构。C语言还专门提供了一种实现多分支结构的switch语句。

switch语句的格式如下所示。

    switch(表达式){
              case常量表达式1:  语句1;
              case常量表达式2:  语句2;
              …
              case常量表达式n:  语句n;
              default        :  语句n+1;
              }

上述格式的含义是:计算表达式的值,并与其后的常量表达式逐个进行比较,当表达式的值与某个常量表达式的值相等时,执行其后的语句,然后不再进行判断,继续执行case后的所有语句。如果表达式的值与所有case后的常量表达式值均不相同,则执行default后的语句。看下面的一段代码。

    int main(void){
          int a;
          printf("输入数字: ");
          scanf("%d", &a);
          switch (a){
          case 1:printf("星期一\n");
          case 2:printf("星期二\n");
          case 3:printf("星期三\n");
          case 4:printf("星期四\n");
          case 5:printf("星期五\n");
          case 6:printf("星期六\n");
          case 7:printf("星期日\n");
          default:printf("error\n");
          }
    }

上述代码要求输入一个数字,然后输出一个英文单词。但是当输入3之后,却执行了case 3以及以后的所有语句,输出了Wednesday及以后的所有单词,这显然是不希望的。为什么会出现这种情况呢?这反映了switch语句的一个特点。在switch语句中,“case常量表达式”相当于一个语句标号,若表达式的值和某标号相等则转向该标号处执行,但它不能在执行完该标号的语句后自动跳出整个switch语句,所以出现了继续执行所有case后面语句的情况。这与前面介绍的if语句是完全不同的,应特别注意。为了避免上述情况,C语言提供了break语句,专用于跳出switch语句,break语句只有关键字break,没有参数。在后面还将详细介绍它。修改上面的程序,在每一个case语句之后增加break语句,使每一次执行之后均可跳出switch语句,从而避免输出不应有的结果。看下面的代码。

    int main(void){
          int a;
          printf("input integer number:     ");
          scanf("%d", &a);
          switch (a){
            case 1:printf("Monday\n"); break;
            case 2:printf("Tuesday\n"); break;
            case 3:printf("Wednesday\n"); break;
            case 4:printf("Thursday\n"); break;
            case 5:printf("Friday\n"); break;
            case 6:printf("Saturday\n"); break;
            case 7:printf("Sunday\n"); break;
            default:printf("error\n");
          }
    }

实例7-4

提示用户输入数字,然后输出用户输入的数字

源码路径daima\7\7-4

视频路径 视频\实例\第7章\7-4

本实例的实现文件为“switch.c”,具体实现代码如下。

    #include "stdio.h"
    main() {
        int i;
        printf("输入一个数(1-5):");
        scanf("%d", &i);
        switch (i){
            case 1:printf("输入的是“1”\n"); break;
            case 2:printf("输入的是“2”\n"); break;
            case 3:printf("输入的是“3”\n"); break;
            case 4:printf("输入的是“4”\n"); break;
            case 5:printf("输入的是“5”\n"); break;
        default:printf("输入的数不在范围内\n");
        }
    }

拓展范例及视频二维码

范例7-4-01:演示多条件if语句的用法

源码路径:演练范例\7-4-01\

范例7-4-02:判断整数的正负和奇偶

源码路径:演练范例\7-4-02\

上述代码首先建议用户输入一个1~5的数字,然后根据用户输入的数字利用switch语句来输出对应的提示。

程序运行后将在界面中提示用户输入1个数字,例如输入1个数字3并按Enter键后将在界面中显示刚键入的数字3。执行效果如图7-11所示。

图7-11 执行效果

在具体在使用switch语句时,应该注意如下4点。

(1)case后的各常量表达式的值不能相同,否则会出现错误。

(2)在case后允许有多个语句,可以不用{}括起来。

(3)各个case和default子句的先后顺序可以变动,这不会影响程序执行结果。

(4)default子句可以省略。