返回介绍

6.5 switch 语句

发布于 2024-10-08 23:14:04 字数 3307 浏览 0 评论 0 收藏 0

假设要创建一个屏幕菜单,要求用户从 5 个选项中选择一个,例如,便宜、适中、昂贵、奢侈、过度。虽然可以扩展 if else if else 序列来处理这 5 种情况,但 C++的 switch 语句能够更容易地从大型列表中进行选择。下面是 switch 语句的通用格式:

C++的 switch 语句就像指路牌,告诉计算机接下来应执行哪行代码。执行到 switch 语句时,程序将跳到使用 integer-expression 的值标记的那一行。例如,如果 integer-expression 的值为 4,则程序将执行标签为 case 4:那一行。顾名思义,integer-expression 必须是一个结果为整数值的表达式。另外,每个标签都必须是整数常量表达式。最常见的标签是 int 或 char 常量(如 1 或'q'),也可以是枚举量。如果 integer-expression 不与任何标签匹配,则程序将跳到标签为 default 的那一行。Default 标签是可选的,如果被省略,而又没有匹配的标签,则程序将跳到 switch 后面的语句处执行(参见图 6.3)。

switch 语句与 Pascal 等语言中类似的语句之间存在重大的差别。C++中的 case 标签只是行标签,而不是选项之间的界线。也是说,程序跳到 switch 中特定代码行后,将依次执行之后的所有语句,除非有明确的其他指示。程序不会在执行到下一个 case 处自动停止,要让程序执行完一组特定语句后停止,必须使用 break 语句。这将导致程序跳到 switch 后面的语句处执行。

程序清单 6.10 演示了如何使用 switch 和 break 来让用户选择简单菜单。该程序使用 showmenu( ) 函数显示一组选项,然后使用 switch 语句,根据用户的反应执行相应的操作。

图 6.3 switch 语句的结构

注意:

有些硬件/操作系统组合不会将(程序清单 6.10 的 case 1 中使用的)转义序列\a 解释为振铃。

程序清单 6.10 switch.cpp

下面是该程序的运行情况:

当用户输入了 5 时,while 循环结束。输入 1 到 4 将执行 switch 列表中相应的操作,输入 6 将执行默认语句。

为让这个程序正确运行,输入必须是整数。例如,如果输入一个字母,输入语句将失效,导致循环不断运行,直到您终止程序。为应对不按指示办事的用户,最好使用字符输入。

如前所述,该程序需要 break 语句来确保只执行 switch 语句中的特定部分。为检查情况是否如此,可以删除程序清单 6.10 中的 break 语句,然后看看其运行情况。例如,读者将发现,输入 2 后,将执行 case 标签为 2、3、4 和 defualt 中的所有语句。C++之所以这样,是由于这种行为很有用。例如,它使得使用多个标签很简单。例如,假设重新编写程序清单 6.10,使用字符(而不是整数)作为菜单选项和 switch 标签,则可以为大写标签和小写标签提供相同的语句:

由于 case 'a'后面没有 break 语句,因此程序将接着执行下一行——case 'A'后面的语句。

6.5.1 将枚举量用作标签

程序清单 6.11 使用 enum 定义了一组相关的常量,然后在 switch 语句中使用这些常量。通常,cin 无法识别枚举类型(它不知道程序员是如何定义它们的),因此该程序要求用户选择选项时输入一个整数。当 switch 语句将 int 值和枚举量标签进行比较时,将枚举量提升为 int。另外,在 while 循环测试条件中,也会将枚举量提升为 int 类型。

程序清单 6.11 enum.cpp

下面是该程序的输出:

6.5.2 switch 和 if else

switch 语句和 if else 语句都允许程序从选项中进行选择。相比之下,if else 更通用。例如,它可以处理取值范围,如下所示:

然而,switch 并不是为处理取值范围而设计的。switch 语句中的每一个 case 标签都必须是一个单独的值。另外,这个值必须是整数(包括 char),因此 switch 无法处理浮点测试。另外 case 标签值还必须是常量。如果选项涉及取值范围、浮点测试或两个变量的比较,则应使用 if else 语句。

然而,如果所有的选项都可以使用整数常量来标识,则可以使用 switch 语句或 if else 语句。由于 switch 语句是专门为这种情况设计的,因此,如果选项超过两个,则就代码长度和执行速度而言,switch 语句的效率更高。

提示:

如果既可以使用 if else if 语句,也可以使用 switch 语句,则当选项不少于 3 个时,应使用 switch 语句。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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