切换语句默认范围
Switch statement default range?
这是我无法弄清楚的作业规范的最后一部分:
使用默认大小写来"捕获"大范围的成绩。 不要将 0 到 59 之间的每个数字都列为单独的大小写!
这是我的代码,我的默认值需要使用上面的说明考虑 0 到 59 之间的值。
感谢您的任何帮助/建议。
double percentage;
int grade;
cout << "Enter your grade percentage " <<endl;
cin >> percentage;
if (percentage < 0 || percentage > 100 )
cout << "Invalid entry " << endl;
grade = (int)round(percentage);
cout << fixed << setprecision(2);
switch(grade)
{
case 100:
case 99:
case 98:
case 97:
case 96:
case 95:
case 94:
case 93:
case 92:
case 91:
case 90:
cout << "Percentage: " << percentage << "% " << "Grade: A " << "Points: 4.00";
break;
case 89:
case 88:
case 87:
case 86:
case 85:
case 84:
case 83:
case 82:
case 81:
case 80:
cout << "Percentage: " << percentage << "% " << "Grade: B " << "Points: 3.00";
break;
case 79:
case 78:
case 77:
case 76:
case 75:
case 74:
case 73:
case 72:
case 71:
case 70:
cout << "Percentage: " << percentage << "% " << "Grade: C " << "Points: 2.00";
break;
case 69:
case 68:
case 67:
case 66:
case 65:
case 64:
case 63:
case 62:
case 61:
case 60:
cout << "Percentage: " << percentage << "% " << "Grade: D " << "Points: 1.00";
break;
default:
cout << "Percentage: " << percentage << "% " << "Grade: F " << "Points: 0.00";
break;
}
return 0;
}
根据@dvix的评论,如果您知道成绩将在 0 到 100 之间(包括 0 和 100),您可以通过以下方式缩短代码:
switch( grade/10 ) {
case 10:
case 9:
... Do something ...
break;
case 8:
case 7:
... Do something else...
break
....
}
并在最后使用默认值,节省几种情况。
话虽如此,if
可能是正常处理这个问题的惯用方法。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 为什么在全局范围内使用"extern int a"似乎不行?
- 如何使用默认参数等选择模板专业化
- 具有默认模板参数的多态类的模板推导失败
- 尝试通过多个向量访问变量时,向量下标超出范围
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 错误:未在此范围内声明'reverse'
- 正在将指针转换为范围
- 使用std::transform将一个范围的元素添加到另一个范围中
- 具有公共范围与专用范围的默认值的C++的不同行为
- 使函数参数默认为周围范围
- 我是否误解了此默认参数共享的范围
- GCC 或 Clang 关于函数参数在其自己的默认参数中的范围内的名称是否正确?
- 为什么范围V3产量需要默认构造函数
- 来自 gmock 的默认值的范围问题
- 默认模板参数的范围是什么?
- 在默认参数中使用依赖范围作为 std::less 的类型时出现编译错误
- 为什么默认情况下使用 [ ] 运算符访问超出范围的矢量元素时,C++检测?
- 如何使用默认移动构造函数将数据移出范围
- 切换语句默认范围