switch(表达式)
括号中的表达式类型:整型、字符型、布尔型、枚举型
switch()语句的括号内的表达式必须是整型,它要与case 里的值呼应
字符型,只有字符常量可以,例如 'a' 'b' '6' '\r' 可以由ASCLL码转换成整型
布尔型 -- 真,假, 实际上是 0, 1
enum(枚举) 型也可以
凡表达式值为整型的都可以
case 常量标号:
case后面的常量标号,其类型应与表达式的数据类型相同。表示根据表达式计算的结果,可能在case的标号中找到,标号不允许重复,具有唯一性,所以,只能选中一个case标号。尽管标号的顺序可以任意的,但从可读性角度而言,标号应按顺序排列
注意点:switch 语句中不能有continue, 除非switch本身就属于for或while循环的一部分
程序示例1:
/*******************************************************************************************************/
by linqiang
/*******************************************************************************************************/
int main(void)
{
int i = 0;
char c = 'a';
switch (5)
{
case 5.366://在vs2019中程序是通过的 程序将双精度浮点型的5.366转换成整型的5 输出结果是嘿嘿 但是应该避免
printf("heihei");
break;
case 0:
printf("haha");
break;
default:
printf("xixi");
break;
}
return 0;
}
例子中switch(5)里面的5换成整型变量i或者是字符串变量c 都是可以的
case语句后面的常量标号换成 case 1: 或者 case 'a':也是可以的 编译软件都可以隐式转换成ASCLL码对应的数字
以及case 5.366 这种写法应该要避免这样写
switch (5)
{
case 0:
printf("haha");
break;
case 0:
printf ("heihie");
break;
default:
printf("xixi");
break;
}
程序会报错 因为case后面的常量标量重复的 已经存在一个case 0:了
/*******************************************************************************************************/
程序示例2:
/*******************************************************************************************************/
by linqiang
/*******************************************************************************************************/
switch (1)
{
case 1:
b = 3;
case 2:
b = 4;
//break 加入这里加上break 那么switch(1)输出结果是4
case 3:
b = 5;
default:
b = 6;
}
当每个case语句中都没有break函数的时候 程序最终输出 printf("%d\n", b);//输出6
因为每个case语句中都没有break函数去终止当前程序的switch语句 switch()中表达式等于1, 程序会从case1开始一直往下执行一直到default执行完结束 , 如果switch(4) 则直接跳转到default语句中,b=6 也是输出6 如果在case 2:下面的b=4末尾加上一句break 那么switch(1)输出结果是4
因为经过case 1 再到case 2 b=4之后 break终止了switch语句
/*******************************************************************************************************/
程序示例3:
/*******************************************************************************************************/
by linqiang
/*******************************************************************************************************/
switch (a)
{
case 1:
b = 3;
break;
case 2:
b = 4;
break;
case 3:
b = 5;
break;
default:
b = 6;
break;
}
当a等于1的时候 程序在case 1处执行了b=3的赋值语句 接着break 直接终止了switch语句 那么程序最终的输出结果是b等于6 语句中存在break语句的时候 当对应的case语句结束后 程序break就终止了switch 不会往下执行
/*******************************************************************************************************/
程序示例4:
/*******************************************************************************************************/
by linqiang
/*******************************************************************************************************/
switch (5)
{
default:
b=5;
case 1:
b = 3;
break;
}
default 可以放在case的前面 不影响程序的使用 输出结果b等于3 因为switch表达式中是5 case中没有对应的case语句 所以执行default 得到b等于5 但是因为没有break语句 所以继续执行case 1 得到b等于3
/*******************************************************************************************************/