一、switch case 语句的认知
switch 是另外一种选择结构的语句,用来代替简单的、拥有多个分枝的 if else 语句。
它的执行过程是:
1) 首先计算“表达式”的值(表达式必须是一个整型char、short, int, long 等 或枚举类型),假设为 m。
2) 从第一个 case 开始,比较“整型数值1”和 m,如果它们相等,就执行冒号后面的所有语句,执行完成则跳出switch语句。
3)break 是C语言中的一个关键字,专门用于跳出 switch 语句。所谓“跳出”,是指一旦遇到 break,就不再执行 switch 中的任何语句,包括当前分支中的语句和其他分支中的语句;也就是说,整个 switch 执行结束了,接着会执行整个 switch 后面的代码。
4)default是C语言的关键字,当输入的值无法匹配case所有后面的值时,将执行default后面的语句块。
除了case 后面是整型数,还可以是字符。
例如:
#include <stdio.h>
int main(void)
{
int data;
printf("请输出一个整数:");
scanf("%d", &data);
switch (data)
{
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");
break;
}
return 0;
}
那么想要实现相同功能下,如果我们用if语句来进行编写的话,我们的代码将会是:
#include <stdio.h>
int main(void)
{
int data;
printf("请输出一个整数:");
scanf("%d", &data);
if(data == 1)
{
printf("Monday\n");
}
else if(data == 2)
{
printf("Tuesday\n");
}
else if(data == 3)
{
printf("Wednesday\n");
}
else if(data == 4)
{
printf("Thursday\n");
}
else if(data == 5)
{
printf("Friday\n");
}
else if(data == 6)
{
printf("Saturday\n");
}
else if(data == 7)
{
printf("Sunday\n");
}
else
{
printf("error\n");
}
return 0;
}
二、switch-case语句中的break
例如:
#include <stdio.h>
int main(void)
{
int data;
printf("请输出一个整数:");
scanf("%d", &data);
switch (data)
{
case 1:
printf("Monday\n");
break;
case 2:
printf("Tuesday\n");
case 3:
printf("Wednesday\n");
break;
case 4:
printf("Thursday\n");
case 5:
printf("Friday\n");
break;
case 6:
printf("Saturday\n");
case 7:
printf("Sunday\n");
break;
default:
printf("error\n");
break;
}
return 0;
}
那么假设,分别输入2 3 4 5,输出结果为多少?
2:
Tuesday
Wednesday
3:
Wednesday
4:
Thursday
Friday
5:
Friday
如果“整型数值”和 data 不相等,就跳过冒号后面的“语句”,继续比较第二个 case、第三个 case……一旦发现和某个整型数值相等了,就会执行后面所有的语句。假设 data 和“整型数值2相等,那么就会从“语句2”一直执行到有break,才会跳出switch。如果没有写 break,会执行下一个 case 语句块,直到遇到 break 或者执行到 switch 结尾, 这个现象称为穿透。
三、switch细节总结:
1)switch 语句中的 expression 是一个常量表达式,必须是一个整型(char、short, int, long 等,不包括小数点) 或枚举类型
2)case 子句中的值必须是常量,而不能是变量
3)default 子句是可选的,当没有匹配的 case 时,执行 default
4)break 语句用来在执行完一个 case 分支后使程序跳出 switch 语句块;
5)如果没有写 break,会执行下一个 case 语句块,直到遇到 break 或者执行到 switch 结尾, 这个现象称为穿透.