可能重复:
How do I select a range of values in a switch statement?
我遇到了一些错误,我一直在寻找一段时间,但我不知道错误的原因是什么。 (我对编程很陌生。)
以下是我遇到的错误:
error: 'Essais' cannot appear in a constant-expression| (line 200)
warning: overflow in implicit constant conversion| (line 202)
我有案例和cote:
char AfficherCote (int Essais)
{
char Cote;
switch (Essais)
{
(line200) case Essais<=20:
{
(line 202) Cote='Excellent';
return (Cote);
break;
}
case Essais<=40:
{
Cote='Très bon';
return (Cote);
break;
}
case Essais<=60:
{
Cote='Bon';
return (Cote);
break;
}
case Essais<=80:
{
Cote='Moyen';
return (Cote);
break;
}
case Essais<=100:
{
Cote='Muvais';
return (Cote);
break;
}
case Essais>=100:
{
Cote='Très mauvais';
return (Cote);
}
}
}
答案 0 :(得分:3)
switch-case
仅适用于常量值(*)(例如3
或'a'
),而不适用于范围(例如<=100
)。您也不得在case
语句中包含变量名称。正确的语法如下:
switch (Essais)
{
case 1:
/* ... */
break;
case 2:
/* ... */
break;
default:
/* ... */
}
如果您需要范围测试,请使用if
代替switch-case
:
if (Essais <= 80)
return "Cote";
else if (Essais <= 100)
return "Muvais";
另请注意,您不能对字符串使用单引号'
。请改用双引号"
,并使用std::string
类型的变量(不是char
)来存储字符串。
(*)确切地说,case
语句中给出的条件必须是整数类型,枚举类型或类类型的常量表达式 convertible 为整数或枚举类型(有关详细信息,请参阅C ++标准的第6.4.2 / 2节)。
答案 1 :(得分:0)
这不是switch
阻止工作的方式。你需要做这样的事情:
switch (Essais) {
case 20:
...
case 40:
...
case 60:
...
/* etc, etc */
}
每个case
将switch
语句中的值与特定常量值进行比较。如果它们相等,则执行该块。在您的代码中,编译器抱怨,因为像Essais<=20
这样的表达式不是它在编译时可以计算的常量。
鉴于您要做的事情,if ... else if ... else
链更合适。 switch
块只能针对特定值进行测试,并且无法处理测试范围,这是您尝试执行的操作。