switch语句是多项选择语句,if...else..嵌套也是多通道选择语句。他们的之间有区别吗?有!但是在有些时候可以相互替换。
我们来看一下switch的语句结果
switch(表达式)
{
case label1:
statement1
break;
case label2:
statement2
break;
case label3:
statement3
break;
.......
......
case labeln
statementn
break;
defaule:
statement_dafault
break;
}
我们来分析一下switch 语句的运行过程:
1,首先计算“表达式”的值value
2,value是否与label1相等,如果相等执行 statement1语句,beak退出 switch.否则顺序向下执行。
3,value是否与label2相等,如果相等执行 statement2语句,beak退出 switch.否则顺序向下执行。
4,value是否与label3相等,如果相等执行 statement1语句,beak退出switch.否则顺序向下执行。
......
5,value是否与labeln相等,如果相等执行 statement1语句,beak退出 switch.否则顺序向下执行。
6,value与lable1、lable2、lable3.....lablen任何一个都不相同。执行
statement_dafault.退出switch语句。
我们根据上一节内容分析,应该可以使用if...else..嵌套。他们区别在
《C primer plus》有介绍。labeln是一个点。不能表达一个区段。另外当你选择项太多时,尽可能使用switch。因为switch非常清晰。
假如我们有8个独立键盘,当有任意一个键(只考虑一个键,不考虑组合键)按下时使用switch分析到底是哪个键盘按下。我们随便写一段代码来熟悉一下switch。
int main( )
{
unsigned char key;
while(1)
{
key=P0;
switch(key)
{
case 0xFE:
printf("0号键盘按下!");
break;
case 0xFD:
printf("1号键盘按下!");
break;
case 0xFB:
printf("2号键盘按下!");
break;
case 0xF07:
printf("3号键盘按下!");
break;
case 0xEF:
printf("4号键盘按下!");
break;
case 0xDF:
printf("5号键盘按下!");
break;
case 0xBF:
printf("6号键盘按下!");
break;
case 0x7F:
printf("7号键盘按下!");
break;
case 0xFF:
printf("无键盘按下!");
break;
default:
printf("两个以上键盘按下!");
break;
}
}
}
这段断码不实用,因为没有考虑防抖。但是未我们展示switch语句的使用方法。简单清晰!这段代码功能使用if...else..嵌套一定能实现。如果有兴趣可以自己动手实现一下。比较一下两者的区别。
最后强调一下,break也是一条单独语句。他有另外一个作用是跳出一层循环。