微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用开关盒的更好方法?

如何解决使用开关盒的更好方法?

所以我的问题是我正在尝试编写一个使用开关大小写告诉函数执行哪种大小写的程序。我试图将or语句包含在切换用例中,以便为每种用例提供​​一个范围的值,但似乎给我带来了错误。使用开关盒是否可以解决此问题,还是我只是滥用开关盒而应尝试其他方法?谢谢。

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
int Random(int);
void Movement(void);
int main()
{
int healthratio=5;
switch(healthratio){
case healthratio>0 || healthratio<=10:
printf("%d.\n",healthratio);
break;
case healthratio>10 || healthratio<=20:
printf("%d.\n",healthratio);
break;
case healthratio>20:
printf("%d.\n",healthratio);
break;
}
}

运行此代码时,出现此错误错误:大小写标签未减少为整数常量”

解决方法

case healthratio>0 || healthratio<=10

这在标准C语言中无效,某些编译器允许使用case ranges,即gccclang

case 0 ... 10:
    printf("%d.\n",healthratio);
    break;

但是,如果无法使用它们,则必须定义所有情况:

case 0:
case 1:
case 2:
...
case 10:
    printf("%d.\n",healthratio);
    break;

或使用if语句:if (x >= 0 && x <= 10) ...

,

根据C标准(6.8.4.2 switch语句)

3 每个案例标签的表达式应为整数常量 表达式,并且没有两个大小写常数表达式在同一个 转换后,switch语句的值应相同。也许有 在switch语句中最多为一个默认标签。 (随函附上 switch语句可能具有默认标签或大小写常量表达式 具有与外壳中的大小写常量表达式重复的值 切换语句。)

但是在这样的标签中

case healthratio>0 || healthratio<=10:

使用的表达式不是常量表达式。此外,如果您使用表达式healthratio>0 || healthratio<=10的常量操作数,则根据表达式是true还是false来选择标签

case 0:

case 1:

那不是您所期望的。

您应该使用if-else语句代替

,而不是switch语句
if ( healthratio>0 && healthratio<=10 )
{
    printf("%d.\n",healthratio);
}
else if ( healthratio>10 && healthratio<=20 )
{
    printf("%d.\n",healthratio);
}
else
{
    printf("%d.\n",healthratio);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。