3.1.6 switch语句(1)
switch语句能够基于给定表达式的一组定值,从多个选项中进行选择。其原理就像旋转开关一样,可以从多个选项中选择其中一项,有些洗衣机就是以这种方式供用户操作的。开关上有多个位置,如棉、毛料、合成纤维等,旋转手柄,指向需要的选项,就可以选择任意一个位置。
在switch语句中,作出的选择由指定表达式的值决定。可以用一个或多个case值来定义switch的位置。如果switch表达式的值与某个分情形值(case值)相同,则选择相应的case值。switch语句的每种选择对应一个case值,所有case值都不相同。
switch语句的一般形式如下:
- switch(expression)
- {
- case c1:
- // One or more statements for c1...
- break;
- case c2:
- // One or more statements for c2...
- break;
- // More case statements...
- default:
- // Statements for default case...
- break;
- }
switch和case都是关键字,c1、c2等都是整型常量,或编译器可以计算的、得到整型常量的表达式,即不是必须在运行期间计算的表达式。case语句的顺序可以任意,每个case值都必须唯一,才能让编译器区分它们。当expression计算为其中一个case值时,就执行该case语句后面的语句。
如果switch表达式的值不与任何case值匹配,则switch自动选择默认的case值。也可以省略默认的case值,此时默认的case语句什么也不做。
在执行了某个case语句后,每个case语句末尾的break语句将程序的执行传递给switch块后面的语句。如果没有这条语句,程序将继续执行下一个case语句,默认case后面的break不是必需的,但最好包含它,以便于以后在默认case后面添加case语句。下面看看其工作过程。
试一试: switch语句
通过下面的示例,可以分析switch语句的工作过程。
- // Ex3_05.cpp
- // Using the switch statement
- #include <iostream>
- using std::cin;
- using std::cout;
- using std::endl;
- int main()
- {
- int choice(0); // Store selection value here
- cout << endl
- << "Your electronic recipe book is at your service." << endl
- << "You can choose from the following delicious dishes: "
- << endl
- << endl << "1 Boiled eggs"
- << endl << "2 Fried eggs"
- << endl << "3 Scrambled eggs"
- << endl << "4 Coddled eggs"
- << endl << endl << "Enter your selection number: ";
- cin >> choice;
- switch(choice)
- {
- case 1: cout << endl << "Boil some eggs." << endl;
- break;
- case 2: cout << endl << "Fry some eggs." << endl;
- break;
- case 3: cout << endl << "Scramble some eggs." << endl;
- break;
- case 4: cout << endl << "Coddle some eggs." << endl;
- break;
- default: cout << endl << "You entered a wrong number, try raw eggs."
- << endl;
- }
- return 0;
- }
示例说明
在流输出语句中显示了输入选项,并将选择的数字读入变量choice之后,switch语句开始按照指定的条件执行,该条件是关键字switch后圆括号内的choice。switch中的选项包围在大括号之间,分别用case标签来标识。case标签是关键字case,加上后面跟着的与该选项对应的choice值,并以冒号结束。
可以看出,特定case下要执行的语句写在Case标签结束处冒号的后面,以一条break语句结束。break语句将程序的执行传递给switch后面的语句。break不是必需的,但如果没有这条语句,程序将继续执行后面的case语句,这通常不是我们想要的。可以试一下,看看删除本示例中的break语句之后会发生什么事情。
对特定情形要执行的语句也可以用大括号括起来,有时必须这么做。例如,如果在case语句中创建一个变量,则必须包含括号。下面的语句会导致错误消息:
- switch(choice)
- {
- case 1:
- int count = 2;
- cout << "Boil " << count
- << " eggs." << endl;
- // Code to do something with count...
- break;
- default:
- cout << endl << "You entered a wrong number, try raw eggs." << endl;
- break;
- }