C语言switch语句的用法(非常详细,附带实例)
在 C语言中,switch 是一种多分支的选择结构,可以根据不同的条件执行不同的语句块。
switch 语句的基本语法如下:
每个 case 分支表示一种可能的情况,default 分支则表示当所有的 case 都不符合时需要执行的语句块。当执行 switch 语句时,会将表达式的值和每个 case 分支的常量值进行比较。如果匹配成功,则执行该 case 分支的语句块;如果匹配不成功,则执行 default 分支的语句块(如果有的话)。
每个 case 分支的语句块结束后,需要使用 break 语句来终止整个 switch 语句的执行,否则会继续执行下一个 case 分支的语句块。
switch 语句的执行步骤如下:
switch 的使用如下图所示:
	
图 1 switch示例
switch 语句的几个注意事项:
实际上,switch 在找到对应的 case 后,会从对应的 case 处开始执行,并会执行完之后的所有 case,除非遇到 break 才会跳出整个 switch。
为了使代码按照预期执行,需要在代码中加上 break。我们在代码的第 6 个 case 中,即 'f' 处加上 break:
让我们以下面的程序为例,考虑 switch 中的 break 能否让 while(1) 循环结束:
如果我们将 break 写在 switch 语句外部,那么它将对 while 语句产生影响。我们可以查看下面的实例:
分析下面的程序:
	
	
switch 语句的基本语法如下:
switch(整型表达式)
{
    case 整型常量1:
        语句1;
        break;
    case 整型常量2:
        语句2;
        break;
    ...
    default:
        语句n;
        break;
}
其中,整型表达式可以是确定值为整型的表达式,而整型常量可以是整数、字符或枚举类型。每个 case 分支表示一种可能的情况,default 分支则表示当所有的 case 都不符合时需要执行的语句块。当执行 switch 语句时,会将表达式的值和每个 case 分支的常量值进行比较。如果匹配成功,则执行该 case 分支的语句块;如果匹配不成功,则执行 default 分支的语句块(如果有的话)。
每个 case 分支的语句块结束后,需要使用 break 语句来终止整个 switch 语句的执行,否则会继续执行下一个 case 分支的语句块。
switch 语句的执行步骤如下:
- switch 会先计算括号内的整型表达式结果。
- 依次对比 case 中的常量,是否等于整型表达式的结果。若不相等,对比下一个 case;若相等,跳转到这个 case。
- 若没有相等的,跳转到 default。
switch 的使用如下图所示:

图 1 switch示例
switch 语句的几个注意事项:
- switch 后面的括号里面只能填一个整型表达式。
- case 后的常量不能有重复的。
- 可以没有 default。
switch中break的功能
在下面的实例中,每个 case 后面的 break 都被删除了。
#include <stdio.h>
int main()
{
    char c;
    scanf("%c", &c);
    switch(c)
    {
        case 'a':
            printf("alpha\n");
        case 'b':
            printf("bravo\n");
        case 'c':
            printf("charlie\n");
        case 'd':
            printf("delta\n");
        case 'e':
            printf("echo\n");
        case 'f':
            printf("foxtrot\n");
        case 'g':
            printf("golf\n");
        default:
            printf("i don't know\n");
    }
    return 0;
}
运行该代码并在控制台中输入 'e',看看会有什么结果:
	e
	echo
	foxtrot
	golf
	i don't know
实际上,switch 在找到对应的 case 后,会从对应的 case 处开始执行,并会执行完之后的所有 case,除非遇到 break 才会跳出整个 switch。
为了使代码按照预期执行,需要在代码中加上 break。我们在代码的第 6 个 case 中,即 'f' 处加上 break:
#include <stdio.h>
int main()
{
    char c;
    scanf("%c", &c);
    switch(c)
    {
        case 'a':
            printf("alpha\n");
        case 'b':
            printf("bravo\n");
        case 'c':
            printf("charlie\n");
        case 'd':
            printf("delta\n");
        case 'e':
            printf("echo\n");
        case 'f':
            printf("foxtrot\n");
            break;
        case 'g':
            printf("golf\n");
        default:
            printf("i don't know\n");
    }
    return 0;
}
运行结果为:
	e
	echo
	foxtrot
break和continue在switch语句的作用范围
我们知道,break 和 continue 都是可以作用于循环结构的,那么若把循环和 switch 相结合,它们究竟作用于谁呢?1) break的作用范围
在 C语言中,break 关键字可以用于循环语句和 switch 语句中。但是,如果循环语句和 switch 语句同时存在,那么 break 关键字的作用范围是什么呢?让我们以下面的程序为例,考虑 switch 中的 break 能否让 while(1) 循环结束:
#include <stdio.h>
int main()
{
    char c;
    while(1)
    {
        scanf("%c", &c);
        switch(c)
        {
            case 'a':
                printf("alpha\n");
                break;
            case 'b':
                printf("bravo\n");
                break;
            case 'c':
                printf("charlie\n");
                break;
            default:
                printf("i don't know\n");
        }
        getchar();    // 吸收字符'\n'
    }
    return 0;
}
答案是不能。switch 中的 break 只能作用于 switch 语句内部,它的作用是跳出 switch 语句,而不能对 while 语句产生影响。如果我们将 break 写在 switch 语句外部,那么它将对 while 语句产生影响。我们可以查看下面的实例:
#include <stdio.h>
int main()
{
    char c;
    while(1)
    {
        scanf("%c", &c);
        switch(c)
        {
            case 'a':
                printf("alpha\n");
                break;    // 这个break 直属于 switch
            case 'b':
                printf("bravo\n");
                break;    // 这个break 直属于 switch
            case 'c':
                printf("charlie\n");
                break;    // 这个break 直属于 switch
            default:
                printf("i don't know\n");
        }
        getchar();  // 这个break 直属于 while
        break;
    }
    return 0;
}
2) continue的作用范围
和 break 类似,如果循环语句和 switch 语句同时存在,那么 continue 关键字的作用范围是什么呢?分析下面的程序:
#include <stdio.h>
int main()
{
    char c;
    while(1)
    {
        scanf("%c", &c);
        switch(c)
        {
            case 'a':
                printf("alpha\n");
                break;
            case 'b':
                printf("continue\n");
                getchar();
                continue;
                printf("bravo\n");  // 这句代码不会被执行
                break;
            case 'c':
                printf("charlie\n");
                break;
            default:
                printf("i don't know\n");
        }
        getchar();
    }
    return 0;
}
输出结果为:
	b
	continue
 
	 ICP备案:
 ICP备案: 公安联网备案:
 公安联网备案: