在C++中,switch语句中可以有一系列的值
In C++ can there be a range of values in a switch statement?
我想知道在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以供快速参考。
相关文章:
- 我的简单if-else语句是如何无法访问的代码
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 为什么是0;C++中的有效语句
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 是否可以使用if constexpr删除控制流语句
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 我似乎对if/else的基本语句有问题:/
- 当调用switch语句中的函数时(即使函数不包含循环),似乎是永不结束的循环的问题
- If语句在c++中被忽略
- 比较if语句中的数组值和int值
- 以在Qt中的IF语句中设置时间延迟
- Craps游戏问题,忽略if语句
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 如何编写一个使用n倍三元条件语句的C++布尔函数
- c++:定义if语句中的模板
- 在C++中,switch语句中可以有一系列的值