使用 Switch Case 的更好方法?

Better Way to Use Switch Case?

所以我的问题是我正在尝试编写一个程序,该程序使用 switch case 来告诉函数要执行哪个 case。我试图在 switch 案例中包含一个 or 语句,以便我可以为每个案例提供一系列值,但它似乎向我展示了一个错误。是否有使用 switch case 解决此问题的方法,或者我只是滥用了 switch case 并且应该尝试不同的方法?谢谢

#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 标签不会减少为整数常量”

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 The expression of each case label shall be an integer constant expression and no two of the case constant expressions in the same switch statement shall have the same value after conversion. There may be at most one default label in a switch statement. (Any enclosed switch statement may have a default label or case constant expressions with values that duplicate case constant expressions in the enclosing switch statement.)

但是在这样的标签中

case healthratio>0 || healthratio<=10:

使用的表达式不是常量表达式。此外,如果您使用表达式 healthratio>0 || healthratio<=10 的常量操作数,那么根据表达式是真还是假,您有一个标签

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);
}