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

In C++ can there be a range of values in a switch statement?

本文关键字:一系列 语句 C++ switch      更新时间:2023-10-16

我想知道在switch case语句中是否可能有范围。当我运行以下代码时,我得到以下错误:error:score不能出现在常量表达式中案例得分<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;
}

C中的切换用例实际上只是一个计算的goto,而不是一个比较,如果条件不匹配,则跳到下一个用例,因此它不能支持这样的用例比较。

此外,你的例子是不正确的。如果C<60分将匹配所有4种情况,那么它将跳到哪里?与C<当它匹配3种情况时为70,依此类推。

GCC支持案例范围扩展,但与您预期的不同。无论如何,如果需要,你仍然可以使用

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 rangen";
}

在我所知道的所有语言中,只有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

不,你不能那样做。

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

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