3.3.5 switch…case 语句
C 语言的分支结构中还有一个 switch…case 语句,通过它同样能实现多选一的效果,而且使代码的逻辑更加清晰。switch…case 语句的使用格式如下:
switch 关键字后面的小括号内是一个整型表达式,下面的大括号内有着一系列的 case 标签和一个可选的 default 标签。每个 case 标签由“case”关键字打头,后面跟着一个整型常量表达式(不可使用变量或实型常量),并以冒号“:”结束。其中每个 case 标签中的整型常量表达式的值必须唯一,不可重复。default 标签不需要表达式,直接用“default”关键字加上一个冒号“:”即可。在每个 case 标签和 default 标签之后,可以有相应的语句,以及一个 break。switch…case 语句的执行流程如图 3.4 所示。
程序运行时,首先会计算整型表达式的值,然后用该值与后面的所有 case 标签进行一一匹配(即查看该值与 case 标签的表达式的值是否相等)。如果有匹配的 case 标签,则从该 case 标签起,执行后续的语句,直至遇到 break 语句或右大括号时为止;若没有匹配的 case 标签,则从 default 标签起,执行后续的语句,直至遇到 break 或右大括号时止;若没有匹配的 case 标签,则执行 default 标签,若没有 default 标签,则该 switch…case 语句什么都不做。
图 3.4 switch…case 语句执行流程
现在知道 break 语句的作用了吧,它可以终止 switch…case 语句的执行。如果在某处漏掉了必要的 break,则 switch…case 语句不会被终止,程序会继续执行后面的语句,直到遇见 break 语句或者代表整个 switch…case 语句结束的右大括号。
下面用 switch…case 语句重写一下之前的“评分案例”,代码如下:
在代码中,switch…case 语句的整型表达式为“score / 10”,通过这个表达式,我们就可以得到一个分数对 10 进行整除的结果。例如分数为 75,则得到一个值为 7 的结果。这样做的目的,就是把原来 0~100 的分数,换算到一个 0~10 的范围,如果直接使用分数,就需要对应 101 个 case 标签,而使用分数段,最多也就需要对应 11 个 case 标签了。其中的“case 10:”对应 100 分,“case 9:”对应 90~99 分,…,“case 6:”对应 60~69 分,“default:”对应 0~59 分,明白了吧!
代码中把“case 10:”和“case 9:”放在了一起,即对应着 90~100 分的“优秀等级”,如果出现这个区间的分数,就会被这两个标签之一所匹配,然后通过 printf 函数打印出“Grade:A”;“case 8:”对应着 80~89 分,如果被匹配,就会打印“Grade:B”;同样的,“case 7:”和“case 6:”放在了一起,对应着 60~79 分,如果被匹配,就会打印“Grade:C”;而低于 60 分的情况,没有被任何的 case 标签所匹配,即在 switch…case 语句中没有找到“case 5:、case 4: case 3:、case 2:、case 1:、case 0:”这些 case 标签,所以最终就会匹配“default:”,打印出“Grade:D”。
例如我们在程序运行时,输入数字 65,则在 switch…case 语句中会匹配到“case 6:”,从而在控制台窗口上打印出“Grade:C”。实际运行情况如下:
Please enter a score between 0 and 100: 65 Grade:C
最后补充说明一点,在 switch…case 语句中,并没有规定 default 标签必须放在所有 case 标签之后,也就是 default 标签可以放置在任何位置,甚至可以出现在所有 case 标签之前,所以 default 标签下的 break 语句不要随意省略。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论