我想知道是否可以在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;
}
答案 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
后面的表达式必须是常量表达式。它不能在运行时依赖于变量的值。