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

2024-01-07 21:40:02

假设要创建一个屏幕菜单,要求用户从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语句。

文章来源:https://blog.csdn.net/qq_39072304/article/details/134982505
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。