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

news/2024/7/23 9:48:00 标签: c++, 学习, 开发语言, visualstudio, 算法

假设要创建一个屏幕菜单,要求用户从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.niftyadmin.cn/n/5301508.html

相关文章

Flink学习-时间和窗口

在流数据处理应用中&#xff0c;一个很重要、也很常见的操作就是窗口计算。所谓的“窗口”&#xff0c;一 般就是划定的一段时间范围&#xff0c;也就是“时间窗”&#xff1b;对在这范围内的数据进行处理&#xff0c;就是所谓的 窗口计算。所以窗口和时间往往是分不开的。 时…

c# 循环提速

在C#中&#xff0c;以下是一些方法可以提高循环执行的效率&#xff1a; 使用Dictionary或Hashtable代替List&#xff1a; 当你需要频繁查找元素时&#xff0c; Dictionary或者Hashtable的查找速度通常要比List快。这是因为它们通过哈希码直接访问元素&#xff0c;时间复杂度为…

Redis 键中冒号的用途是什么?可以使匹配查询更快吗?

Redis 键中冒号的用途是什么在Redis中&#xff0c;冒号&#xff08;:&#xff09;用作键的分隔符&#xff0c;它的主要作用是创建层次结构和命名空间。通过在键中使用冒号&#xff0c;可以将键分为多个部分&#xff0c;从而更好地组织和管理数据。 以下是冒号在Redis键中的用途…

【sql】_![CDATA[]]_和转义字符:

文章目录 一、转义字符二、<![CDATA[]]>三、<![CDATA[]]>和xml转移字符的关系&#xff0c;它们两个看起来是不是感觉功能重复了&#xff1f; 所有 XML 文档中的文本均会被解析器解析。 只有 CDATA 区段&#xff08;CDATA section&#xff09;中的文本会被解析器忽略…

三种方式在ASP.NET Core中实现代理功能请求获取数据的接口(以请求百度统计数据接口为例)

一、定义请求数据属性 TargetUrl参数是目标接口的URL&#xff0c;RequestDataArray参数是要发送的请求数据列表 //定义属性:TargetUrl参数是目标接口的URL&#xff0c;RequestDataArray参数是要发送的请求数据列表public class ToResponseBody{[JsonPropertyName("Target…

Java解决字典序最小回文串

Java解决字典序最小回文串 01 题目 给你一个由 小写英文字母 组成的字符串 s &#xff0c;你可以对其执行一些操作。在一步操作中&#xff0c;你可以用其他小写英文字母 替换 s 中的一个字符。 请你执行 尽可能少的操作 &#xff0c;使 s 变成一个 回文串 。如果执行 最少 操…

关于标准那些事——第六篇 四象之“朱雀”(要素的表述)

两仪生四象——东方青龙&#xff08;木&#xff09;、西方白虎&#xff08;金&#xff09;、南方朱雀&#xff08;火&#xff09;、北方玄武&#xff08;水&#xff09; 分别对应标准编写之四象——层次的编写、要素的编写、要素的表述、格式的编排。 今天来分享一下 要素的表…

FastGPT的安装部署

安装docker和docker-compose 下载更改配置文件 mkdir fastgpt cd fastgpt curl -O https://raw.githubusercontent.com/labring/FastGPT/main/files/deploy/fastgpt/docker-compose.yml curl -O https://raw.githubusercontent.com/labring/FastGPT/main/projects/app/data/c…