switch也是分支结构的一种。并且我认为它的分支比if-else语句更加的明显一点。并且感觉他比if-else更简单,更像是一种最纯粹的分支结构。下面我就简单介绍一下我对switch语句的理解。
1、switch语句的一些基本结构
1.1switch语句的效果:
switch的整形表达式的值确定以后,会在case语句中寻找到具有相同值的整型常量表达式,然后执行这条表达式后面的语句。也就是说,switch语句写好以后就已经把各个分支路线都设计好了,根据输入的整形表达式的不同,进入不同的case路线。假如说输入的整形表达式的值在后面的case语句中找不到,那么就会执行default后面的语句。
case相当于一个入口,而在每个case语句后面都会加一个break,相当于一个出口。当计算机在执行代码的时候遇上了break,就会跳出当前switch语句。如果没有break,那么程序将会从第一个case一直执行到最后一个case,不会退出。所以break语句是必要的。
switch(整型表达式)
{
case 整型常量表达式1:
语句1;
break;
case 整型常量表达式2:
语句2;
break;
......
default:
语句n;
break;
}
1.2、switch括号里的表达式
switch括号里必须是整型或者枚举型,可以是int、long、long long、char等类型的表达式,可以是常量,也可以是变量。char类型虽然是字符类型,但是由于单个字符在计算机内也是由某些整数形式(ASCII码)存储的,所以它也可以认为是整型。
以下是几个例子:
#include<stdio.h>
int main()
{
#1、常量整型
switch (1)
{
case 1:
break;
}
#2、变量整型
int a=0;
switch (a)
{
case 0:
break;
}
#3、字符变量
char b = 'm';
switch (b)
{
case 'm':
break;
}
return 0;
}
这几种形式都是可以运行的。 (这里没有加default语句,大家不要学我)
1.3、switch中的case
case后面需要加一个空格,然后输入常量,不可以是变量,可以是整型或者字符。然后加一个冒号,后面再写需要执行的语句。为了使代码清晰容易读懂,可以使用缩进符让执行语句比case语句靠后一点,是不是就像有从属关系了呢?
在每一个case语句中的代码最后,都加上一个break,这样才能跳出这个switch语句。如果没有break语句将会是下面的结果:
#include<stdio.h>
int main()
{
int a = 0;
switch (a)
{
case 0:
printf("不要\n");
case 1:
printf("忘记\n");
case 2:
printf("加break\n");
default:
printf("哦!\n");
}
return 0;
}
最后从0到default全部执行了一遍。
1.4、switch语句中的default
在使用switch语句时,如果switch语句中的表达式中的值没有找到case语句中相匹配的值的话,就会最终执行default语句中的内容。如下示例:
#include<stdio.h>
int main()
{
int a = 1;
switch (a)
{
case 0:
printf("case语句有这个值\n");
break;
default:
printf("没有呢\n");
break;
}
return 0;
}
2、switch语句的一些问题
2.1、switch语句中的case和default的顺序问题
case与default语句并没有顺序要求,default可以放在任何地方,但通常情况下会把它放在最后。
除此之外case表达式也不要求按照值的大小顺序排列,但是一般也会按照顺序来写。