![C++新经典](https://wfqqreader-1252317822.image.myqcloud.com/cover/184/44510184/b_44510184.jpg)
4.3.2 switch语句
前面讲述的if语句一般用途是针对两个分支的比较和选择,而switch语句一般用于处理多分支选择。当然,多分支选择可以使用ifelse if…else if…语句来实现,这在前面讲过,但这种连续使用多个elseif实现的多分支选择,可读性不如switch语句好。switch语句的格式如下:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p84_85462.jpg?sign=1738947679-fIVZRwifdlmZeqWma6MJviWBH1noABuS-0-0df7d0836c03dd265873fbcc14e05d88)
解释一下switch语句:switch后面表达式的值若满足(等于)任何某个case后面的常量表达式值,则执行该case后面的1行或多行语句,直到遇到break语句停止,然后跳出整个switch语句并继续switch后面语句的执行,如果所有case条件都不满足,则会执行default中包含的1行或多行语句,然后跳出整个switch语句。看看如下范例:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p84_85464.jpg?sign=1738947679-96vTlYAF7oh9ZH6zK5RkxjHZ8qf33rND-0-ccccb4d3190bf3451869cccd945e0a32)
有几点说明:
(1)switch后面的表达式,可以是整型表达式,也可以是字符型表达式,甚至可以是枚举型数据(后面会讲到)。当然,还可能是其他类型表达式,但都比较罕见。
(2)每个case后面的常量表达式值彼此之间必须互不相同,不然会出现编译错误。
(3)各个case之间、case和default之间的顺序没有影响,谁在上面,谁在下面都可以。
(4)绝不要忘记break语句,每个case的最后,以及default的最后,都有一个“break;”,否则,程序执行就会出现问题。看看如下范例,在case 1:下面遗漏了“break;”,看一看会产生什么后果:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p85_85473.jpg?sign=1738947679-BN5Srz9KCr5ZihhV2kgKQWCvM7JJN4kh-0-119815e4ea5c8803f4b3761082f6fbe6)
从上面的代码可以得到一个结论:如果在一个case的最后不加“break;”的话,会导致执行完一个case中包含的语句后,程序执行流程会继续执行下一个case中包含的语句,而不管该case条件(值)是否满足,也就是说,程序执行流程从满足条件的case那作为入口一直执行下去,除非遇到break语句或整个switch语句执行完毕。
所以,绝对不要忘记,每一个switch语句中的case最后都应该跟一个break语句,除非有特殊需求。
(5)可以看到,case中如果包含多行语句,并不需要使用{}将多行语句括在一起,case条件一旦满足,会自动顺序执行本case后面的所有语句。当然,也有人习惯用{}把要执行的语句括起来,这也完全可以。看如下代码:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p85_85472.jpg?sign=1738947679-Bk4cMuhVN5F1vWsV6x634d8F7ArggoIs-0-c7bc7fae25299df5639b4757e4334252)
(6)default可以没有,那么当所有case条件都不满足,整个switch就不被执行,如下范例就是去掉default后的switch语句,因为所有case条件都不满足,所以相当于整个switch语句都不被执行。
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p85_85471.jpg?sign=1738947679-RyLFvhmGDXPKtCZLyDaIwzIMEUDG36Og-0-eea47804ca48e9f09a59eb4075fc19ad)
(7)多个case条件可以紧挨着写在一起,从而在其中任意一个条件成立时共用一组执行语句。如下代码是从switch语句中拿出的片段,当值为3或者4时都执行同一段代码:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p86_85477.jpg?sign=1738947679-JiAQemViun3Ins22pKF1t58oXkHGo8PB-0-57d33c451c5956e9577eab836db4b378)