返回介绍

3.3.5 switch…case 语句

发布于 2025-04-11 22:32:53 字数 2607 浏览 0 评论 0 收藏 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。