0

可能重复:
如何在 switch 语句中选择一系列值?

我遇到了一些错误,我已经搜索了一段时间,但我不知道错误的原因是什么。(我对编程很陌生。)

以下是我得到的错误:

error: 'Essais' cannot appear in a constant-expression| (line 200)
warning: overflow in implicit constant conversion| (line 202)

我有case和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);
    }
  }
}
4

2 回答 2

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(not char) 的变量来存储字符串。


(*)准确地说,case语句中给出的条件必须是整数类型、枚举类型或可转换为整数或枚举类型的类类型的常量表达式(详见 C++ 标准第 6.4.2/2 节)。

于 2012-11-13T02:08:45.327 回答
0

这不是switch块的工作方式。你需要做这样的事情:

switch (Essais) {
    case 20:
        ...
    case 40:
        ...
    case 60:
        ...
    /* etc, etc */
}

每个都caseswitch语句中的值与特定的常量值进行比较。如果它们相等,则执行该块。在您的代码中,编译器抱怨,因为表达式 likeEssais<=20不是它可以在编译时评估的常量。

鉴于您正在尝试做的事情,if ... else if ... else链条会更合适。 switch块只能针对特定值进行测试,并且无法处理测试范围,这似乎是您正在尝试做的事情。

于 2012-11-13T02:12:07.917 回答