许诺一号 发表于 2018-5-11 23:21:08

关于switch的使用

#include<stdio.h>
#include<math.h>
int main()
{
        float y;
        int x, i;
       
        scanf("%d", &x);
        switch (x)
        {
                case x>=0&&x<10: y=cos(x+3.0);printf("%.5f", y);
                                               break;
                case x>=10&&x<20: y=cos(x+7.5)*cos(x+7.5);printf("%.5f", y);
                                                  break;
                case x>=20&&x<30: for (i=0,y=1;i<=3;i++) y*=cos(x+4.0);printf("%.5f", y);
                                                  break;
                default: printf("Not define");
        }
       
        return 0;
}

它会给出如下错误:
11        3        C:\Users\dell\Desktop\C语言练习\飞矢不坠.c        case label does not reduce to an integer constant
13        3        C:\Users\dell\Desktop\C语言练习\飞矢不坠.c        case label does not reduce to an integer constant
请问怎么处理

风过无痕丶 发表于 2018-5-11 23:25:25

case 不能是一个表达式

LordHdy 发表于 2018-5-12 00:26:21

ABC23 发表于 2018-5-12 10:04:33

case 数值

di01 发表于 2018-5-12 11:03:58

学习学习,涨涨经验

Wind、 发表于 2018-5-12 13:39:41

switch(var){
    case value1:
    break;
    ...
}

其中case value1分支语句等价于 if( var == value ),并不是像你使用的那样用判别式的true/false来选择是否执行。换句话说,其实你使用的第一个case分支语句等价于 if( x == (x>=0&&x<10) ),这在逻辑上是不对的。然后,分支case的值必须是整型常量(在error信息中写的是末尾的 integer constant)。要实现你所希望的逻辑,应该使用if-else语句。
页: [1]
查看完整版本: 关于switch的使用