C语言提供了另一种用于多分支选择的switch语句(常用于开关),一般形式为:
switch ( 常量表达式 )
{
case 常量1 :语句;
case 常量2 :语句;
case 常量3 :语句;
...
case 常量n:语句;
default :语句;
}
语义:计算常量表达式的值,并逐个与其后的常量值相比较,当表达式的值与某个常量值相等时,即执行其后语句,然后不再进行判断,继续执行后面所有case后的语句。若表达式的值与所有case后的常量值均不同时,则执行default语句。
错例:
#include<stdio.h> void main() { int a; printf("input integer number:"); scanf("%d",&a); switch(a) { case 1:printf("Monday "); case 2:printf("Tuesday "); case 3:printf("Wednesday "); case 4:printf("Thursday "); case 5:printf("Friday "); case 6:printf("Saturday "); case 7:printf("Sunday "); default:printf("error "); } }
为避免上述输出时出现的情况,C语言提供了一种break语句,专用于跳出switch语句,break语句只有关键字break,没有参数。
正例:
#include<stdio.h> void main() { int a; printf("input integer number:"); scanf("%d",&a); switch(a) { case 1:printf("Monday ");break; case 2:printf("Tuesday ");break; case 3:printf("Wednesday ");break; case 4:printf("Thursday ");break; case 5:printf("Friday ");break; case 6:printf("Saturday ");break; case 7:printf("Sunday ");break; default:printf("error ");break; } }
注意:(1)在case后的各常量表达式的值不能相同,否则会出现错误。
(2)在case后允许有多个语句,可以不用{}括起来。
(3)各case和default子句的先后顺序可以变动,而不会影响程序执行结果。
(4)default子句可以省略不用。
(5)只能针对基本数据类型中的整型类型使用switch,这些类型包括int、char等。对于其他类型,则必须使用if语句。
(6)switch()的参数类型不能为实型 。
(7)case标签必须是常量表达式(constantExpression),如42或者"42"。
例:
#include<stdio.h> int main() { char rank; printf("请输入分数等级:(A、B、C、D、E) "); scanf("%c",&rank); switch(rank) { case'A':printf("A(90~100) ");break; case'B':printf("B(80~89) ");break; case'C':printf("C(70~79) ");break; case'D':printf("D(60~69) ");break; case'E':printf("E(0~59) ");break; default:printf("error! ");break; }