C switch 语法
在 C 语言中,选择结构共有 2 种方式:if 语句 和 switch 语句。上一节介绍了 if 语句,这一节我们再来给大家介绍一下 switch 语句。
语法:
switch (判断值)
{
case 取值1:
// 语块1;
break;
case 取值2:
// 语块2;
break;
……
case 取值n:
// 语块n;
break;
default:
// default语块;
}说明:
从英文意思角度来看,switch 是 “开关”,case 是 “情况”,break 是 “断开”,default 是 “默认”。小伙伴们根据英文意思来理解就很容易了。
switch 语句会根据 “判断值” 来判断,然后来选择使用哪一个 case。如果每一个 case 的取值都不符合,那就执行 default 的语句。
注意:
- switch 后面的 “判断值”(表达式)必须是整型(包括 int、char、short、long 等)或枚举类型。
- 每一个 case 后面的 “取值” 必须是常量表达式,并且其类型必须与 switch 后面表达式的类型兼容(通常是整型、字符型或枚举类型)。
- case 后面的取值必须各不相同。
C switch 示例
在 C 语言中,switch 语句在实际开发中是非常重要的,小伙伴们一定要认真掌握。我们通过几个简单的例子来讲解一下 switch 语句是如何使用的。
示例 1:switch 语句的基本用法
#include <stdio.h>
int main(void)
{
int day = 5;
switch (day)
{
case 1:
printf("今天是星期一");
break;
case 2:
printf("今天是星期二");
break;
case 3:
printf("今天是星期三");
break;
case 4:
printf("今天是星期四");
break;
case 5:
printf("今天是星期五");
break;
case 6:
printf("今天是星期六");
break;
default:
printf("今天是星期日");
break;
}
return 0;
}运行结果如下。
今天是星期五分析:
在 switch 语句中,C 语言会从第 1 个 case 开始判断,直到找到满足条件的 case 就会退出,然后后面的 case 就不会执行了。
对于 switch 和 case,大家都知道是怎么一回事,却不太理解 break 和 default 有什么用。下面我们通过两个例子来理解一下。
示例 2:switch 语句中的 break
#include <stdio.h>
int main(void)
{
int day = 5;
switch(day)
{
case 1:
printf("今天是星期一");
case 2:
printf("今天是星期二");
case 3:
printf("今天是星期三");
case 4:
printf("今天是星期四");
case 5:
printf("今天是星期五");
case 6:
printf("今天是星期六");
default:
printf("今天是星期日");
}
return 0;
}运行结果如下。
今天是星期五今天是星期六今天是星期日分析:
day 的值为 5,为什么这里最终输出的不是 “今天是星期五” 呢?其实,这就是缺少 break 语句的结果。
实际上,在 switch 语句中,首先会判断 case 的值是否符合 day 的值。因为 day 的值为 5,此时会执行 “case 5” 这一分支。但是由于没有在 “case 5” 后面加上 break 语句,因此程序还会把后面的 “case 6” 以及 “default” 都执行了。
break 语句用于结束 switch 语句,从而使 C 语言仅仅执行对应的一个分支。如果没有了 break 语句,则该 switch 语句中 “对应的分支” 被执行后,还会继续执行后面的分支,这种现象被称为 “case 穿透 (fall-through)” 。因此对于 switch 语句,我们一定要在每一个 case 语句后面加上 break 语句!
示例 3:switch 语句中的 default
#include <stdio.h>
int main(void)
{
int n;
scanf("%d", &n);
switch(n)
{
case 1:
printf("你输入的数字是:1");
break;
case 2:
printf("你输入的数字是:2");
break;
case 3:
printf("你输入的数字是:3");
break;
case 4:
printf("你输入的数字是:4");
break;
case 5:
printf("你输入的数字是:5");
break;
default:
printf("你输入的数字不在 1~5 之间");
}
return 0;
}运行之后,我们输入 10,结果如下。
你输入的数字不在 1~5 之间分析:
在这个例子中,我们使用 default 来定义默认情况,因此无论 n 的值是 10、12、15 还是 100,最终执行的也是 default 这一个分支。
注意: 在标准的 C 语言中,case 后面的取值不能直接是字符串。如果需要根据字符串进行判断,通常需要使用 if...else if...else 结构或将字符串映射到整数或枚举类型。
深入了解 C switch 语句
对于 switch 语句来说,小伙伴们还需要清楚以下 2 点。
- 在 switch 语句中,多个 case 可以共用一组语句。
- switch 语句中的 default 不是必须的。
示例 4:多个 case 共用一组语句
#include <stdio.h>
int main(void)
{
int n;
scanf("%d", &n);
switch(n)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("你输入的数字在 1~5 之间");
break;
default:
printf("你输入的数字不在 1~5 之间");
}
return 0;
}运行之后,我们输入 3,结果如下。
你输入的数字在 1~5 之间分析:
对于 switch 语句来说,多个 case 可以共用一组执行语句,上面这个例子就很好地展示了这一点。当 n 的值为 1、2、3、4 或 5 时,都会执行 case 5 后面的 printf() 语句,直到遇到 break 才跳出。
示例 5:default 语句不是必须的
#include <stdio.h>
int main(void)
{
int day = 5;
switch(day)
{
case 1:
printf("今天是星期一");
break;
case 2:
printf("今天是星期二");
break;
case 3:
printf("今天是星期三");
break;
case 4:
printf("今天是星期四");
break;
case 5:
printf("今天是星期五");
break;
case 6:
printf("今天是星期六");
break;
case 7:
printf("今天是星期日");
break;
}
return 0;
}运行结果如下。
今天是星期五分析:
对于 switch 来说,default 语句不是必须的。比如上面这个例子,一周只有 7 天,我们可以完全枚举出来,这个时候就不需要用到 default 语句了。如果 day 的值不在 1 ~ 7 之间,则没有任何 case 会被匹配,switch 语句会直接结束,没有任何输出。
最后,对于 C 语言的 switch 语句,我们可以总结出以下几点。
- switch 后面接的值(表达式)可以是整型(包括 char 类型)、字符型或枚举型,但不能为浮点型。
- 每一个 case 后面的值必须是常量表达式,并且其类型必须与 switch 后面表达式的类型兼容。
- 每一个 case 后面的值必须各不相同,但是可以不分先后顺序。
- 多个 case 可以共用一组执行语句。
- default 语句不是必须的。
- 在每个 case 语句块的末尾,通常需要使用 break 语句来防止 case 穿透。
