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也是一条单独语句。他有另外一个作用是跳出一层循环。