在C ++中,switch语句中可以有一系列值吗?

时间:2014-09-12 02:42:44

标签: c++ switch-statement range

我想知道是否可以在switch case语句中包含范围。 当我运行以下代码时,我收到以下错误:错误:得分不能出现在常量表达式中      案例得分< 60:

int score;

cout << " enter score";
cin >> score;

switch(score)
{

case score < 60:
    cout << "F";
    break;

case score < 70:
    cout << "D";
    break;

case score < 80:
    cout << "C";
    break;

case score < 90:
    cout << "B";
    break;

default: cout << "A";
}

   return 0;
}

2 个答案:

答案 0 :(得分:3)

C中的切换案例实际上只是一个计算goto ,而不是比较并跳转到下一个案例,如果条件不匹配,那么它就不能支持像这样的案例比较

除了你的例子是不正确的。如果C < 60分将匹配所有4个案例,那么它会在哪里跳?与C&lt;相同70匹配3个案件等等。

GCC支持case ranges扩展,但不符合您的预期。无论如何,如果需要,你仍然可以使用它

switch (score)
{

case 0 ... 59:
    cout << "F";
    break;

case 60 ... 69:
    cout << "D";
    break;

case 70 ... 79:
    cout << "C";
    break;

case 80 ... 89:
    cout << "B";
    break;

case 90 ... 100:
    cout << "A";
    break;

default:
    cout << "Out of range\n";
}

在我所知的所有语言中,只有Visual Basic支持

等情况下的比较
Select Case score
    Case Is >= 0 And Is < 60

    Case Is >= 60 And Is < 70

    Case Is >= 70 And Is < 80

    Case Is >= 80 And Is < 90

    Case Is >= 90 And Is <= 100

    Case Else
End Select

然而,获得范围的更好方法是将得分除以10

const char* SCORE[] = "FDCBA";
if (score < 60)
    cout << SCORE[0];
else if (score < 100);
    cout << SCORE[score/10 - 5];
else if (score == 100)
    cout << SCORE[4];

当然,您仍然需要确保分数不低于0或高于100

答案 1 :(得分:2)

不,你做不到。

case后面的表达式必须是常量表达式。它不能在运行时依赖于变量的值。

请参阅http://en.cppreference.com/w/cpp/language/switch以获取快速参考。