|
我们已见过,当要选择多个中的一个时,可以使用if语句来控制其选择。但是,随着可选项数量的增加,这种程序的复杂性将快速增长。程序将变得难以阅读和理解。有时,即使是设计人员自己也会迷惑。幸运的是,C语言具有一个内置的名为swich的多路判断语句。switch语句吧给定变量的值与case的值进行比较,如果发现有一个匹配,那么就运行该case相关的语句块。switch语句的一般形式为:
switch(expression)
{
case value-1:
block-1;
break;
case value-2:
block-2;
break;
default:
default-block;
break;
}
statement-x;
expression是一个整数表达式或字符。value-1,value-2,…为常量或常量表达式,称为case标签。在switch语句内这些值应是唯一的。block-1.block-2,…为语句列表,可含有零个或多个语句。这些语句块不必用括号括起来。注意,case标签是以冒号结尾的。
当运行switch语句时,expression的值与value-1,value-2,…的值进行比较,如果发现了某个case的值与expression的值匹配,就运行该case后面的语句块。
每个语句块的末尾为break语句。它标志着该case的结尾,并使控制权从该switch语句中退出来,转移到switch后面的statement-x。
Default是一个可选项。当它出现时表示,如果expression的值与所有case值都不匹配,那么就运行default后面的语句。如果没有它,那么当多有匹配都失效时,不进行任何动作,而是把控制权转交给switch后面的statement-x语句。
switch语句的选择过程如图的流程图所示。
下面用switch语句来写一个给学生评级的示例程序,可以用switch语句来改写。具体如下:
......
index =marks/10;
switch(index)
{
case 10:
case 9:
case 8:
grade ="Honours";
break;
case 7;
case 6;
grade="First Division";
break;
case 5;
grade="Second Division";
break;
case 4;
grade="Third Division";
break;
default;
grade="Fail";
break;
}
printf("%s\n",grade);
......
注意,我们这里使用了一个转换语句:
index =marks/10;
其中,变量index被定义为整数。它具有如下的整数值。
marks index
100 10
90~99 9
80~89 8
… …
0 0
程序的代码段说明了两个重要特性。首先,它使用了空的case语句。头三个case都运行相同的语句:
grade ="Honours";
break;
case7和case6也是如此。第二,缺省条件用于所有得分小于40的情况。
switch语句经常用于菜单选择。例如:
......
printf("TRAVEL GUIDE\n\n");
printf("A Air Timings\n");
printf("T Train Timings\n");
printf("X To skip\n");
printf("\n Enter you choice\n");
character=getchar();
switch(character)
{
case 'A':
air-display();
break;
case 'B':
bus-display();
break;
case 'T':
train-display();
break;
default:
printf("No choice\n");
}
......
也可以嵌套switch语句。也就是说,一个switch语句可以是某个case语句的一部分。
switch语句的使用规则
switch表达式必须是整型的。
case标签必须是常量或常量表达式。
case标签必须是唯一的。不允许两个标签具有相同的值。
case标签必须以冒号结尾。
break语句把控制权转出switch语句。
default标签是可选的。如果有,当表达式找不到一个相匹配的case标签时,将运行default语句。
最多只能由一个default标签。
default可以房子任意位置,但通常放在末尾。
switch语句允许嵌套。
凌阳教育,全国唯一一家原厂式嵌入式培训机构,专业从事嵌入式人才培训13年,最近新开课程信息安全工程师培训,想了解更多嵌入式资料下载或者是凌阳教育的动态,请访问凌阳教育官网www.sunplusedu.com