0

重複の可能性:
switchステートメントで値の範囲を選択するにはどうすればよいですか?

エラーが発生し、しばらく検索してきましたが、エラーの原因がわかりません。(私はプログラミングにまったく慣れていません。)

私が得ているエラーは次のとおりです。

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

私はケースとコートを持っています:

  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'、範囲(など)では機能しません<=100caseまた、ステートメントに変数名を含めないでください。正しい構文は次のようになります。

switch (Essais)
{
case 1:
   /* ... */
  break;
case 2:
   /* ... */
   break;
default:
   /* ... */
}

範囲テストが必要な場合は、次ifの代わりに使用してswitch-caseください。

if (Essais <= 80)
  return "Cote";
else if (Essais <= 100)
  return "Muvais";

また、文字列に一重引用符'を使用することはできないことに注意してください。代わりに二重引用符を使用し、タイプ(ではない)"の変数を使用して文字列を格納します。std::stringchar


(*)正確には、ステートメントで指定される条件は、整数型、列挙型、または整数型または列挙型に変換可能なクラス型の定数式caseである必要があります(詳細については、C ++標準の§6.4.2/2を参照してください)。

于 2012-11-13T02:08:45.327 に答える
0

それはswitchブロックが機能する方法ではありません。代わりに、次のようなことを行う必要があります。

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

それぞれがステートメントの値を特定の定数値caseと比較します。switchそれらが等しい場合、そのブロックが実行されます。Essais<=20あなたのコードでは、のような式はコンパイル時に評価できる定数ではないため、コンパイラは文句を言っています。

あなたがやろうとしていることを考えると、if ... else if ... elseチェーンがより適切でしょう。 switchブロックは特定の値に対してのみテストでき、テスト範囲を処理できません。これは、実行しようとしているように見えます。

于 2012-11-13T02:12:07.917 に答える