【C++ Primer Plus学习记录】switch语句

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

下面是switch语句的通用格式:

switch(integer-expression)
{case label1 : statement(s)case label2 : statement(s)...default : statement(s)
}

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

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

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

//6.10
#if 1
#include<iostream>
using namespace std;void showmenu();//函数原型
void report();
void comfort();int main()
{showmenu();//函数调用int choice;cin >> choice;while (choice != 5){switch (choice){case 1:cout << "\a\n";break;//break语句确保只执行switch语句中的特定部分。case 2:report();break;case 3:cout << "The boss was in all day.\n";break;case 4:comfort();break;default:cout << "That's not a choice.\n";}showmenu();cin >> choice;}cout << "Bye!\n";system("pause");return 0;
}void showmenu()//函数定义
{cout << "Please enter 1,2,3,4,or 5:\n""1)alarm          2)report\n""3)alibi          4)comfprt\n""5)quit\n";
}void report()
{cout << "It's been as excellent week for business.\n""Sales are up 120%.Expenses are down 35%.\n";
}void comfort()
{cout << "Your employees think you are the finest CEO\n""in the industry.The board of directors think\n""you are the finest CEO in the industry.\n";
}
#endif

1.将枚举量作为用作标签

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

//6.11
#if 1
#include<iostream>
using namespace std;
enum{red,orange,yellow,green,blue,violet,indigo};//枚举int main()
{cout << "Enter color code(0-6): ";int code;cin >> code;while (code >= red && code <= indigo){switch (code){case red:cout << "Her lips were red.\n"; break;case orange:cout << "Her hair was orange.\n"; break;case yellow:cout << "Her shoes were yellow.\n"; break;case green:cout << "Her nails were green.\n"; break;case blue:cout << "Her sweatsuit was blue.\n"; break;case violet:cout << "Her eyes were violet.\n"; break;case indigo:cout << "Her mood was indigo.\n"; break;}cout << "Enter color code(0-6): ";cin >> code;}cout << "Bye\n";system("pause");return 0;
}
#endif

2.switch和if else

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/317857.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA断点调试

IDEA断点调试 断点调试是一种在程序执行过程中暂停执行并逐步检查代码状态的方法。它允许开发者在程序运行到特定位置时暂停执行&#xff0c;查看变量的值、执行过程和调用栈等信息&#xff0c;从而更好地理解代码的运行情况和解决问题。可以帮助我们查看java底层源代码的执行…

Spring Security及若依安全实现,Java小白入门(九)

背景 一个系统总会遇到安全&#xff0c;权限的问题&#xff0c;并且一坨坨的术语&#xff0c;让人恼火&#xff1b;更恼火的是官方一坨坨的代码实现&#xff0c;理不清剪不断&#xff1b;最最恼火的是你还得重新注入自己的一些实现&#xff0c;比如个性话的用户、个性化的权限…

【普中开发板】基于51单片机音乐盒LCD1602显示( proteus仿真+程序+设计报告+讲解视频)

【普中开发板】基于51单片机音乐盒LCD1602显示( proteus仿真程序设计报告讲解视频&#xff09; 仿真图proteus7.8及以上 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;P08 1. 主要功能&#xff1a; 基于51单片机AT89C51/52&#…

【算法与数据结构】763、LeetCode划分字母区间

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;本题要求为&#xff1a; 1.尽可能多的划分片段2.字母只能出现在一个片段中3.片段连接起来仍然是s&…

RocketMQ5.0Pop消费模式

前言 RocketMQ 5.0 消费者引入了一种新的消费模式&#xff1a;Pop 消费模式&#xff0c;目的是解决 Push 消费模式的一些痛点。 RocketMQ 4.x 之前&#xff0c;消费模式分为两种&#xff1a; Pull&#xff1a;拉模式&#xff0c;消费者自行拉取消息、上报消费结果Push&#x…

L1-083:谁能进图书馆

题目描述 为了保障安静的阅读环境&#xff0c;有些公共图书馆对儿童入馆做出了限制。例如“12 岁以下儿童禁止入馆&#xff0c;除非有 18 岁以上&#xff08;包括 18 岁&#xff09;的成人陪同”。现在有两位小/大朋友跑来问你&#xff0c;他们能不能进去&#xff1f;请你写个程…

机器学习笔记 - 偏最小二乘回归 (PLSR)

一、偏最小二乘回归:简介 PLS 方法构成了一个非常大的方法族。虽然回归方法可能是最流行的 PLS 技术,但它绝不是唯一的一种。即使在 PLSR 中,也有多种不同的算法可以获得解决方案。PLS 回归主要由斯堪的纳维亚化学计量学家 Svante Wold 和 Harald Martens 在 20 世纪 80 年代…

智能安全帽定制_基于联发科MT6765安卓核心板方案

智能安全帽&#xff1a;解放双手&#xff0c;实现远程指导和可视化管理 智能安全帽在安全帽的基础功能上&#xff0c;高度集成了摄像头、语音、通信主板等模块&#xff0c;具有高清视频采集、语音通讯、对讲、本地视频存储等功能。它是一款真正意义上解放现场操作人员双手的穿戴…

《Linux系列》Linux磁盘MBR分区扩容

文章目录 Linux磁盘MBR分区扩容1.前言2.控制台磁盘扩容3.分区扩容3.1 fdisk3.2 lsblk3.3 扩容分区 4.扩容文件系统4.1 df4.2 扩容文件系统 Linux磁盘MBR分区扩容 1&#xff09;参考阿里云扩容分区文档&#xff0c;整理MBR分区扩容 2&#xff09;本文档适用于MBR分区(fdisk -lu查…

数据挖掘中的数据属性特点、描述性统计度量与相似度计算

目录 1. 引言 2. 数据挖掘中的数据属性 2.1 数值属性 2.2 标称属性 2.3 有序属性 2.4 无序属性 3. 描述性统计度量 3.1 中心趋势度量 3.2 离散程度度量 3.3 分布形状度量 4. 相似度计算 4.1 欧氏距离 4.2 余弦相似度 4.3 Jaccard 5. 数据挖掘中的案例应用 5.1 …

本科毕业四年,跳槽3次,从外包到年入20W,谁还没点绝活呢?

本人本科就读于某普通院校&#xff0c;毕业后通过同学的原因加入软件测试这个行业&#xff0c;角色也从测试小白到了目前的资深工程师&#xff0c;从功能测试转变为测试开发&#xff0c;并顺利拿下了某二线城市互联网企业Offer&#xff0c;年薪20W 。 选择和努力哪个重要&#…

Java经典面试题笔记

一&#xff0c;Java基础 1&#xff0c;说说你对面向对象的理解。 什么是面向对象呢&#xff1f;在所其是什么时&#xff0c;不妨我们先来说说以其不同的一个概念面向过程。面向过程是一个更加注重事情的每一个步骤即顺序&#xff0c;即是强调过程的。而面向对象更加注重有哪些…