![v2-0f47755a90eac25a8b8076a1136d5573_1440w.jpg?source=172ae18b](http://img-01.proxy.5ce.com/view/image?&type=2&guid=e9f05d14-ef2e-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-0f47755a90eac25a8b8076a1136d5573_1440w.jpg?source=172ae18b)
显示输入的整数除以3所得余数的程序如代码清单 demo1.c 所示。
代码清单 demo1.c
![v2-2b0666fdd5512e694ceaf841c6921d5c_b.jpg](http://img-01.proxy.5ce.com/view/image?&type=2&guid=e9f05d14-ef2e-eb11-8da9-e4434bdf6706&url=https://pic1.zhimg.com/v2-2b0666fdd5512e694ceaf841c6921d5c_b.jpg)
本程序中使用了两次计算no除以3的余数的表达式no%3,多次输入同一个表达式,容易造成输入错误。不仅如此,同一个除法执行两次也会使程序略显冗长。
使用switch语句修改后的程序如代码清单 demo2.c 所示。
代码清单 demo2.c
![v2-5c279da990575b3963232c5032926ee9_b.jpg](http://img-03.proxy.5ce.com/view/image?&type=2&guid=e9f05d14-ef2e-eb11-8da9-e4434bdf6706&url=https://pic2.zhimg.com/v2-5c279da990575b3963232c5032926ee9_b.jpg)
像“case 1:”这样用来表示程序跳转的标识称为标签(label)。
标签的值必须为常量,不可为变量。另外,不允许多个标签同为一个值。程序跳到该标签后,会按顺序执行其后的语句,因此画面中会显示“该数除以3的余数是1。”。
当程序执行到 break语句(break statement) 时,switch语句执行结束。
break有“打破”“脱离”之意。执行break语句之后,程序就会跳出将它围起来的switch语句。
复杂的switch语句
代码清单 demo3.c 中的switch语句比较复杂。下面我们就以该程序为例,来加深对switch语句中的标签和break语句的动作的理解。
代码清单 demo3.c
![v2-168fde858f6799b7549ef293156ea86f_b.jpg](http://img-02.proxy.5ce.com/view/image?&type=2&guid=e9f05d14-ef2e-eb11-8da9-e4434bdf6706&url=https://pic4.zhimg.com/v2-168fde858f6799b7549ef293156ea86f_b.jpg)
- 有些 case 语句没有写 break,如果此时检查到条件满足该 case,程序执行完该 case 的语句,会继续执行下一个case的语句,直到遇到 break。
- 当控制表达式的判断结果与任何一个case都不一致的时候,程序就会跳转到 default: 继续执行。
► 如果改变本程序switch语句中标签的顺序,程序的执行结果也会发生改变.所以在使用switch语句的时候,一定要正确书写标签的顺序。