c - 在 C 中使用一长串 "if/else if"语句的更好替代方案?

标签 c if-statement

最初我使用 switch/case,但条件必须是变量匹配的常量值,而不是变量是否在范围内的 bool 值。

相反,我有这个怪物:

    if ( data[y] > 91 ) {
       grades[9] = grades[9] + 1;
    }
    else if ( data[y] > 88 && data[y] < 92 ) {
        grades[8] = grades[8] + 1;
    }
    else if ( data[y] > 84 && data[y] < 89 ) {
        grades[7] = grades[7] + 1;
    }
    else if ( data[y] > 81 && data[y] < 85) {
        grades[6] = grades[6] + 1;
    }
    else if ( data[y] > 79 && data[y] < 82) {
        grades[5] = grades[5] + 1;
    }
    else if ( data[y] > 74 && data[y] < 79 ) {
        grades[4] = grades[4] + 1;
    }
    else if ( data[y] > 71 && data[y] < 75 ) {
        grades[3] = grades[3] + 1;
    }
    else if ( data[y] > 68 && data[y] < 72 ) {
        grades[2] = grades[2] + 1;
    }
    else if ( data[y] > 59 && data[y] < 69 ) {
        grades[1] = grades[1] + 1;
    else {
        //data[y] < 60:
        grades[0] = grades[0] + 1;
    }

有没有人知道处理这段代码的更好方法,因为我的 switch/case 想法不适用?当然,必须有更好的方法来做到这一点。

最佳答案

缩短代码最明显的方法是摆脱不必要的二次测试:

if      (data[y] >= 92) ++grades[9];
else if (data[y] >= 89) ++grades[8];
else if (data[y] >= 85) ++grades[7];
else if (data[y] >= 82) ++grades[6];
else if (data[y] >= 80) ++grades[5];
else if (data[y] >= 75) ++grades[4];
else if (data[y] >= 72) ++grades[3];
else if (data[y] >= 69) ++grades[2];
else if (data[y] >= 60) ++grades[1];
else                    ++grades[0];

关于c - 在 C 中使用一长串 "if/else if"语句的更好替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25794662/

相关文章:

python - 显示 "if any"检测到的列表元素

mysql - 帮助 MySQL Procedure Nested IF ELSE statements

C - 当程序在同一秒内执行时,如何确保在 C 中生成不同的随机数?

在二叉搜索树中将前序前驱与其后继连接

C代码在ideone上运行良好,但在spoj中得到WA

java - 我的 if 语句每次都返回错误的值,是我的数组吗?

sql - If Exists 命令设置变量

jquery根据菜单onchange值加载页面元素

c - 将 FT_UNIT32 字段解释为小端

c - 局部变量的返回值。哪一个是不好的做法?