首页 > 编程笔记

C语言switch case语句的用法(非常详细)

在《C语言if else语句》一问中,我们介绍了 if 语句的嵌套结构可以实现多分支,但实现起来,if 的嵌套层数过多,程序冗长且较难理解,还会使得程序的逻辑关系变得不清晰。如果采用 switch case 语句实现分支则结构比较清晰,而且更容易阅读及编写。

C语言 switch case 语句的一般语法格式如下。

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

其中,[ ] 括起来的部分是可选的。此外,最后的 default 部分也是可选的。

执行过程:先计算 switch 表达式的值,并逐个与 case 后面的常量表达式的值相比较,当表达式的值与某个常量表达式i的值一致时,则从该 case 后的语句i开始执行,直到遇到 break 语句或 switch 语句的“}”;若表达式与任何常量表达式的值均不一致,则执行 default 后面的语句或执行 switch 结构的后续语句。

请看下面的例子:

switch(x)
{
    case 1:
        printf("statement 1.\n");
        break;
    case 2:
        printf("statement 2.\n");
        break;
    default:
        printf("default");
}

以上代码在执行时,如果 x 的值为 1,则输出 statement 1.。

说明:x 的值与第一个 case 后的常量1一致,就处理它后面的输出语句,然后遇到 break 语句,退出 switch 结构。同样,如果 x 的值为 2,则输出“statement 2.”;如果 x 的值是除了 1 和 2 的其他值,程序则输出“default”,遇到“}”退出 switch 结构。

switch结构的说明如下。
多个 case 语句共用一组执行语句的例子:

switch(x)
{
    case 1:
    case 2:
        printf("statement 2.\n");
        break;
    default:
        printf("");
}

表示 x 的值为 1 或 2 都执行“printf("statement 2.\n");”语句。

示例

根据一个代表星期几的 0~6 之间的整数,在屏幕上输出它代表的是星期几。
#include  <stdio.h >
int  main( )
{
    int  w; /*定义代表星期的整数变量w*/
    printf("请输入代表星期的整数(0~6) : ") ;
    scanf("%d",&w); /*从键盘获取数据赋值给变量w*/

    switch(w) /*根据变量w的取值选择执行不同的语句*/
    { 
        case  0 : /*当w的值为0时执行下面的语句*/
            printf(" It's Sunday .\n");
            break ;
        case  1 : /*当w的值为1时执行下面的语句*/
            printf(" It's Monday .\n");
            break ;
        case  2 : /*当w的值为2时执行下面的语句*/
             printf(" It's Tuesday .\n");
             break ;
        case  3 : /*当w的值为3时执行下面的语句*/
             printf(" It's Wednesday .\n");
             break ;
        case  4 : /*当w的值为4时执行下面的语句*/
             printf(" It's Thuesday .\n");
             break ;
        case  5 : /*当w的值为5时执行下面的语句*/
             printf(" It's Friday .\n");
             break ;
        case  6 : /*当w的值为6时执行下面的语句*/
            printf(" It's Saturday .\n");
            break ;
        default :
            printf(" Invalid data!\n"); /*当w取别的值时*/
    }
   
    return 0;
}
运行结果:

请输入代表星期的整数(0~6) : 6
It's Saturday .


本范例中,首先从键盘输入一个整数赋值给变量 w,根据 w 的取值分别执行不同的 case 语句。例如当为 w 赋值 6 时,执行 case 6 后面的语句:

printf(" It's Saturday .\n");
break ;

于是,在屏幕上输出“It's Saturday”。

从本范例可以看到,switch 语句中的每一个 case 的结尾通常有一个 break 语句,它停止并退出 switch 语句的继续执行,而转向 switch 语句的后续语句,如果没有 break,则顺序执行下一个 case 后的语句。使用 switch 语句比用 if-else 语句简洁得多,可读性也好得多。因此遇到多分支选择的情况,应当尽量选用 switch 语句,避免采用嵌套较深的 if-else 语句。

技巧:case 后面的常量表达式可以是一条语句,也可以是多条语句,甚至可以在 case 后面的语句中再嵌套一个 switch 语句。

优秀文章