C语言:switch语句用法

哪错了?

#include "stdio.h"
void main()
{
char c;
scanf("%c",&c);
switch(c)
{
case (c>=90 && c<=100):printf("成绩的等级为:A.\n");
break;
case (c>=80 && c<=89):printf("成绩的等级为:B.\n");
break;
}

}

PS:case (c>=90 && c<=100):printf("成绩的等级为:A.\n");重点解释
那 c<=100 要怎么表示?

执行过程:

    先计算并获得switch后面小括号里的表达式或变量值,然后将计算结果顺序与每个case后的常量比较。

    当二者相等时,执行个case块中的代码,当遇到break时,就跳出switch选择结构,执行switch选择结构之后的代码。

    如果任何一个case之后的常量与switch后的小括号中的值相等,则执行switch尾部的default块中代码。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-27
case (c>=90 && c<=100):
case后面的必须是一个常量。
你这个可以先将成绩除以10,再用switch
#include "stdio.h"
void main()
{
char c; /*这里别用char,改成:int c,d;*/
scanf("%c",&c); /*这一句也改成scanf("%d",&c);最好前面再加一句,printf("请输入成绩:"); 在这句后面加一句d=c/10;*/
switch(c) /*然后switch里面用d来判断,switch(d)*/
{
case (c>=90 && c<=100):printf("成绩的等级为:A.\n");
break; /*改成: case (10):
case (9):printf("成绩的等级为:A.\n");break;
case (c>=80 && c<=89):printf("成绩的等级为:B.\n");
break; /*改成:case (8):printf("成绩的等级为:B.\n"); break;
}

}
因为90到100之间的数经过除以10再取整以后就变成了9;100/10等于10,又因为case调用同一个语句的时候允许就在最后一个语句写上那个语句,而将前面的那几个省略掉,所以case (10):后面的就省掉了,当然写上也不会错。
你的补充的那个,你可以把它分开表示,就像我给你弄的那个case (c>=90 && c<=100):printf("成绩的等级为:A.\n");
break; /*改成: case (10):
case (9):printf("成绩的等级为:A.\n");break;
虽然有点纠缠不清的感觉,但是希望对解决你的疑问有一定的帮助,呵呵。。。本回答被提问者采纳
第2个回答  2009-04-09
你的代码错了,switch中case后跟的条件必须是一个确定的数,不是范围,而且c的类型也声明错了,可以这样改:
#include "stdio.h"
void main()
{
int c,a;
printf("请输入成绩:\n");
scanf("%c",&c);
if(c>=90) a=1;
else if(c>=80) a=2;
switch(a)
{
case 1:printf("成绩的等级为:A.\n");
break;
case 2:printf("成绩的等级为:B.\n");
break;
}

}
第3个回答  2020-05-05
case
(c>=90
&&
c<=100):
case后面的必须是一个常量。
你这个可以先将成绩除以10,再用switch
#include
"stdio.h"
void
main()
{
char
c;
/*这里别用char,改成:int
c,d;*/
scanf("%c",&c);
/*这一句也改成scanf("%d",&c);最好前面再加一句,printf("请输入成绩:");
在这句后面加一句d=c/10;*/
switch(c)
/*然后switch里面用d来判断,switch(d)*/
{
case
(c>=90
&&
c<=100):printf("成绩的等级为:A.\n");
break;
/*改成:
case
(10):
case
(9):printf("成绩的等级为:A.\n");break;
case
(c>=80
&&
c<=89):printf("成绩的等级为:B.\n");
break;
/*改成:case
(8):printf("成绩的等级为:B.\n");
break;
}
}
因为90到100之间的数经过除以10再取整以后就变成了9;100/10等于10,又因为case调用同一个语句的时候允许就在最后一个语句写上那个语句,而将前面的那几个省略掉,所以case
(10):后面的就省掉了,当然写上也不会错。
你的补充的那个,你可以把它分开表示,就像我给你弄的那个case
(c>=90
&&
c<=100):printf("成绩的等级为:A.\n");
break;
/*改成:
case
(10):
case
(9):printf("成绩的等级为:A.\n");break;
虽然有点纠缠不清的感觉,但是希望对解决你的疑问有一定的帮助,呵呵。。。
第4个回答  2009-04-09
你输入的是分数,怎么能用Char呢?char是定义字符型变量的,应该用int.并且case后只能整型的或字符型的,如case 1:和case'a': 不能为条件语句.楼上的有写的对的,自己琢磨琢磨~
相似回答