张世来4610484 发表于 2020-2-15 13:39:56

小白问关于case的问题

想问下 case后面的常量表达式有什么要求吗,比如下面这种ABCD为什么要加单引号,后面是数字就不用加,能解释下原因吗,数字加了单引号就错误,字母不加也会错误
#include <stdio.h>
void main ()
{
        chargrade;
        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);
}

4goodworld 发表于 2020-2-15 13:49:18

case后面只能是整型或字符型的常量或常量表达式
至于为什么,就好像为啥红灯停绿灯行,这个有些就是这么规定的

qiuyouzhi 发表于 2020-2-15 13:49:33

因为字符必须加引号,这就是C语言的规则
下面的代码是因为你读取的是数字,所以case前面也必须是数字

major_lyu 发表于 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语句也必须是对应的枚举类型的常量。

清风与月 发表于 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‘,不会出错),可能是你哪里出现错误了,或者符号中英文没搞好。(如有错误,请指正)
页: [1]
查看完整版本: 小白问关于case的问题