目录
整型常量用作case标签
枚举量用作case标签
switch语句格式:
switch(integer-expression)
{case label1: statement(s)case label2: statement(s)...default: statement(s)}
语句说明:
- integer-expression表达式的值必须为整数;
- 每个标签都必须为整数常量表达式,常见的int和char,也可以是枚举类型,不能是浮点型。
- 如果integer-expression不与任何标签匹配,则程序将跳转到标签为default那一行,default是可选的,如果没有,程序将直接跳出switch语句,执行switch后面的语句。
- case只是行标签,不是选项之间的界限。即程序跳转到switch中特定代码行后将依次执行之后的语句,不会在遇到下一个case处自动停止。要让程序执行完一组特定语句后停止,则必须用break语句。使用break语句后,程序才会跳出switch,开始执行switch之后的语句;
- switch不是为处理取值范围而设计的,switch语句中的每一个case标签都必须是一个单独的值。
- 当所有选项都可以使用整型常量来标识且数目不小于3,那么使用switch是非常合适的,相比if else语句,它的运行效率更高,代码更简洁。
整型常量用作case标签
一个简单的实例:
#include <iostream>
using namespace std;void showmenu()
{cout << "please enter 1, 2, 3, 4, or 5: \n" <<"1.alarm 2.report 3.alibi 4.comfort 5.quit \n ";
}void report()
{cout << "it is an excellent week for business. \n";
}void comfort()
{cout << "Your employees think you are the finest CEO. \n";
}int main()
{showmenu();int choice;cin >> choice;while (choice != 5){switch (choice){case 1:cout << "\a\n";break;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";}cin >> choice;}return 0;
}
运行代码如下图所示:
当输入1-4时程序将执行switch列表对应的操作,输入5while循环结束,输入6则输出default行所在的语句。如前所述,该程序需要break语句来确保只执行switch语句中的特定部分,可以把标签行中的break语句删除试试,看看运行结果,你会发现当输入2后,将执行case标签为2,3,4和default中的所有语句。C++之所以这样做,是因为这种行为很有用。例如,假设重新编写示例程序,使用字符作为选项和switch标签,则可以为大写标签和小写标签提供相同的语句。
#include <iostream>
using namespace std;void showmenu()
{cout << "please enter 1, 2, 3, 4, or 5: \n" <<"1.alarm 2.report 3.alibi 4.comfort 5.quit \n ";
}void report()
{cout << "it is an excellent week for business. \n";
}void comfort()
{cout << "Your employees think you are the finest CEO. \n";
}int main()
{showmenu();char choice;cin >> choice;while (choice != 'Q' && choice != 'q'){switch (choice){case 'a':case 'A':cout << "\a\n";break;case 'r':case 'R':report();break;case 'l':case 'L':cout << "the boss was in all day.\n";break;case 'c':case 'C':comfort();break;default:cout << "that's not a choice. \n";}cin >> choice;}return 0;
}
说明:由于case 'a'后面没有break语句,因此程序将接着执行下一行case 'A'后面的语句。
枚举量用作case标签
当case标签为枚举量时,switch语句将int值和枚举量标签进行比较时,将枚举量提升为int。另外,在while循环测试条件中,也会将枚举量提升为int类型。
示例代码:
#include <iostream>
using namespace std;int main()
{enum {red, orange, yellow, green, blue};cout << "enter color code 0-4: ";int code;cin >> code;while (code >= red && code <= blue){switch (code){case red:cout << "12" << endl;break;case orange:cout << "13" << endl;break;case yellow:cout << "14" << endl;break;case green:cout << "15" << endl;break;case blue:cout << "16" << endl;break;default:break;}cout << "enter color code 0-4: ";cin >> code;}return 0;
}
说明:将枚举量当作int类型处理时,如果没有显式的设置枚举量的值,那么默认排在第一个的枚举量的值为整型常量0,第二个为整型常量1,以此类推。