c语言case 条件判断,switch 条件判断

switch的语法架构如下:switch (变量名称或表达式) {

case 符合数字或字符:

语句一;

break;

case 符合数字或字符:

语句二;

break;

default:

陈述三;

}

首先看看switch的括号,当中置放要取出数值的变量,取出数值之后,程序会开始与case设定的数字或字符比对,如果符合就执行以下的语句,直到遇到break后离开switch区块,如果没有符合的数值或字符,则会执行default后的语句,default不一定需要,可以省去这个部份。

来看看〈if 条件判断〉中的成绩等级比对,如何使用switch来改写:#include

int main(void) {

int score = 0;

int level = 0;

printf("输入分数:");

scanf("%d", &score);

level = score / 10;

switch(level) {

case 10:

case 9:

puts("得 A");

break;

case 8:

puts("得 B");

break;

case 7:

puts("得 C");

break;

case 6:

puts("得 D");

break;

default:

puts("得 E(不及格)");

}

return 0;

}

执行结果:输入分数:85

得 B

在这个程序中,使用除法并获取运算后的商数,如果大于 90 的话,除以 10 的商数一定是 9 或 10(100 分时),在case 10中没有任何的陈述,也没有使用break,所以会继续往下执行,直到遇到break离开switch,所以学生成绩 100 分的话,也会显示A的成 绩等级;如果比对的条件不在 10 到 6 这些值的话,会执行default下的陈述,这表示商数小于 6,所以学生的成绩等级就显示为 E 了。

注意在case后的等号是冒号而不是分号,这是初学者很常输入错误的符号;如果比对的是字符,记得加上单引号(''),例如:case 'A';

在case中若定义并初始化变量,以下是不合法的:switch(v) {

case 1:

int x = 0; // error: a label can only be part of a statement and a declaration is not a statement

printf("%d\n", x);

break;

default:

printf("default\n");

break;

}

这是因为以上的代码中,default与case属于同一区块,而初始化可能被跳过,如果真的要在case中若定义并初始化变量,必须明确定义另一个区块:switch(v) {

case 1:

{

int x = 0;

printf("%d\n", x);

}

break;

default:

printf("default\n");

break;

}

如果比对的是一个数值范围,在gcc编译器的扩充还允许这样的比对方式:switch(i) {

case 1 ... 30:

// statements

case 31 ... 1000:

// statements

default:

// statements

}

如上所示范的,gcc编译器的扩充可以使用...来设定一个范围的数值,而不用连续地编写case来比对。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值