切换语句默认范围

Switch statement default range?

本文关键字:范围 默认 语句      更新时间:2023-10-16

这是我无法弄清楚的作业规范的最后一部分:

使用默认大小写来"捕获"大范围的成绩。 不要将 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可能是正常处理这个问题的惯用方法。