鱼C论坛

 找回密码
 立即注册
查看: 1390|回复: 4

[已解决]小白问关于case的问题

[复制链接]
发表于 2020-2-15 13:39:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
想问下 case后面的常量表达式有什么要求吗,比如下面这种ABCD为什么要加单引号,后面是数字就不用加,能解释下原因吗,数字加了单引号就错误,字母不加也会错误
#include <stdio.h>
void main ()
{
        char  grade;
        printf("grade=");
        scanf("%c",&grade);
        switch(grade)
        {
        case 'A':printf("85~100");break;
        case 'B':printf("70~84");break;
        case 'C':printf("60~69");break;
        case 'D':printf("<60");break;
        default : printf ("error \n");
        }

}
#include <stdio.h>
void main ()
{        
        int year, month , day , sum ,leap;
        printf("please input year ,month , day \n");
        scanf("%d%d%d",&year,&month,&day);
        switch(month)
        {
        case 1:sum=0;break;
        case 2: sum=31;break;
        case 3: sum =59;break;
        case 4: sum =90;break;
        case 5 : sum =120;break;
        case 6:  sum =151;break;
        case 7: sum =181;break;
        case 8: sum =212;break;
        case 9: sum =243;break;
        case 10: sum =273;break;
        case 11: sum=304;break;
        case 12: sum =334;break;
        default:printf("data error");break;
        }

sum =sum+day;
if((year%400==0)||(year%4==0&&year%100!=0))
        leap=1;
else
leap=0;
if (leap==1&&month>2)
sum++;
printf("%d",sum);
}
最佳答案
2020-2-15 13:49:18
case后面只能是整型或字符型的常量或常量表达式
至于为什么,就好像为啥红灯停绿灯行,这个有些就是这么规定的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-15 13:49:18 | 显示全部楼层    本楼为最佳答案   
case后面只能是整型或字符型的常量或常量表达式
至于为什么,就好像为啥红灯停绿灯行,这个有些就是这么规定的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-15 13:49:33 | 显示全部楼层
因为字符必须加引号,这就是C语言的规则
下面的代码是因为你读取的是数字,所以case前面也必须是数字
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-15 14:16:06 | 显示全部楼层
本帖最后由 major_lyu 于 2020-2-15 14:19 编辑

case 后面的常量数据类型必须与所在的switch()括号中的变量类型一致。

上面的程序switch(grade)中,grade定义的是char类型,因此对应的case 语句的常量数据必须为字符常量,而字符常量的表示形式就是字符加单引号。

下面的程序中switch(month)中,month是int型数据,因此,后面的case语句的常量必须为整型常量,数字加了引号就变成字符常量了,与switch中的month类型不符自然就错了啊。

另外,通常情况下,为了能够明确的控制switch中的可用条件,switch中会用枚举类型作为变量,这时case语句也必须是对应的枚举类型的常量。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-2-15 15:04:32 | 显示全部楼层
switch()括号里面要放整型数据或者是枚举型、布尔型和字符常量,后面三者实际上都是有相应的整数与之对应(bool的true就是1,false就是0;字符的’a'是97)。case后面好像要接那啥整型的常量,比如1、2、3、‘a'等,switch()括号的grade被对应为相应的数字,下面case的后面要用’A‘代表数字65,而你把1缓存’1‘,照理说是不会有错的(我试了你的代码,把1换成’1‘,不会出错),可能是你哪里出现错误了,或者符号中英文没搞好。(如有错误,请指正)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 03:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表