switch
语句概述
switch
语句是一种多路分支选择语句,它允许一个变量的值与多个case
标签进行比较,并执行与该值相匹配的case
块中的代码。其基本语法如下:
switch(表达式) {
case 常量表达式1:
语句1;
break; // 可选,用于跳出switch语句
case 常量表达式2:
语句2;
break; // 可选
...
case 常量表达式n:
语句n;
break; // 可选
default:
语句n+1; // 可选,当没有case匹配时执行
}
示例分析
以下是一个switch
语句的示例,用于根据输入的整数打印星期的名称:
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");
}
switch
语句与if
语句的区别
- 执行流程:
if
语句在条件为真时执行紧随其后的语句块,并立即退出if
结构。而switch
语句在找到匹配的case
后,会执行该case
及其后所有case
(直到遇到break
语句或switch
语句结束)的语句,除非使用了break
来阻止进一步执行。 - 条件判断:
if
语句允许更复杂的条件表达式,而switch
语句的“表达式”通常与case
中的常量表达式进行等值比较。
注意事项
- 唯一性:
case
后的常量表达式必须唯一,否则会导致编译错误。 - 语句块:
case
后的语句块不需要用大括号{}
括起来,但如果想在同一case
下执行多条语句,则应该使用{}
来明确语句块的范围。 - 穿透性:
switch
语句具有“穿透性”,即如果没有break
语句,程序将继续执行下一个case
中的语句。因此,通常需要在每个case
的末尾添加break
语句来避免意外执行。 - 顺序性:
case
和default
子句的顺序可以变动,但通常将default
放在最后以处理所有未明确指定的情况。 default
子句:default
子句是可选的,用于处理没有任何case
匹配的情况。如果省略了default
,且没有case
匹配,那么switch
语句将不执行任何操作。