![零基础C语言学习笔记](https://wfqqreader-1252317822.image.myqcloud.com/cover/191/36710191/b_36710191.jpg)
5.5 switch语句
前面提到,if语句只有两个分支可供选择,而在实际问题中,经常需要用到多分支选择。就像买衣服,可以有多种选择。当然,使用if语句的嵌套也可以实现多分支选择,但是分支越多,嵌套的if语句层数越多,会使程序冗余,并且降低可读性。在C语言中,可以使用switch语句直接处理多分支选择的情况,从而提高程序的可读性。
5.5.1 switch语句的基本形式
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt006_27.jpg?sign=1739487952-3kYujnhPkq4ctifPxHdrLXbfEgjrPKtP-0-5acbd24b482e5e594d6fac2c081ce0f2)
switch语句是多分支选择语句,它的语法格式如下:
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt006_28.jpg?sign=1739487952-xU19XWdlZagHCHTHyTLKI69TnXGNnOJq-0-8dc67eb14cfb71c2bb0a2733112b01fd)
switch语句的流程图如图5.7所示。
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt006_29.jpg?sign=1739487952-XNZEbNoCQL7Uy00DgZD77WHvucH6DKCJ-0-3e51170185ac679cde7439f803244e93)
图5.7 switch语句的流程图
switch语句后面括号中的表达式就是要进行判断的条件。在switch语句块中,使用case关键字表示检验条件符合的各种情况,其后的语句块是相应的操作;在没有符合条件的情况下,执行default关键字后的语句块。
学习笔记
switch语句判断的条件必须是一个整型表达式,可以包含运算符和函数。case语句检验的值必须是整型常量(可以是常量表达式)。
下面通过如下代码分析switch语句的使用方法:
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt006_30.jpg?sign=1739487952-ULf66a1ABkx75HPZQpBrJ2VyVn4aX3Ie-0-32c9d1da7d2cf912abb5cd224682d569)
使用switch语句判断selection变量的值,使用case语句检验selection值的不同情况。如果selection的值为2,那么执行case为2时的语句块,然后跳出switch语句。如果selection的值不是case中列出的任何情况,那么执行default后面的语句块。在每个case或default后都有一条break语句,用于跳出switch语句。
学习笔记
在使用switch语句时,如果没有一条case语句中的值能匹配switch语句中的条件,就执行default语句后面的代码。任意两个case语句都不能使用相同的常量值。每个switch语句结构中只能有一条default语句,并且default语句可以省略。
如果没有break语句,程序会执行后面的所有内容。例如,将上面实例程序中的break注释掉,运行程序,输入数字1,运行结果如图5.8所示。
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt006_31.jpg?sign=1739487952-LB4ydZlhKSPuaQpLpVKkRyxDe7G2bEZE-0-7757089a924ed1aa25b015245c39094d)
图5.8 去掉break语句后的运行图
从图5.8可以看出,在去掉break语句后,会输出case检验相符情况后的所有语句。因此,在这种情况下,break语句在switch语句中是不能缺少的。
5.5.2 多路开关模式的switch语句
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt006_32.jpg?sign=1739487952-CF2vXpR51drRNhJ28YpS5kKrtYPHddtm-0-4f3e0d2d5bf301df2a40fde67a1d6acf)
在前面的实例中,在去掉break语句后,会执行符合检验条件的语句及其后的所有语句。利用这个特点,可以设计多路开关模式的switch语句。多路开关模式的switch语句的语法格式如下:
![img](https://epubservercos.yuewen.com/9B6764/19471983208811106/epubprivate/OEBPS/Images/txt006_33.jpg?sign=1739487952-sf4Kz7y6KsZfW1MfYjrdn2Fqim2xFzX0-0-78ce4bb2536282de33c803f6a4a17410)
因为在case 2后未使用break语句,所以在符合case 2检验条件时与符合case 3检验条件时的效果是一样的。也就是说,使用多路开关模式,可以使多个检验条件执行同一个语句块。