You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言非嵌套多if语句报错求助:sc_score仅返回5或6

问题排查与解决

核心问题分析

  1. 连续比较表达式写法错误
    C语言不支持数学式的连续比较(如0 < nscore <= 50),编译器会将其解析为(0 < nscore) <= 50:
  • 先计算0 < nscore,结果为布尔值(真=1,假=0)
  • 再将这个结果与50比较,由于1或0都满足<=50,所以只要nscore > 0,所有类似X < nscore <= Y的条件都会判定为真。
  • 这导致所有小于100的输入会依次触发前面的if,最终被最后一个if (80 < nscore <= 99)覆盖为5;只有输入100时会执行单独的条件,得到6。
  1. 独立if导致赋值覆盖
    多个独立if会依次检查所有条件,即使前面的条件已匹配,后续条件仍会执行并覆盖sc_score的值。改用else if可确保仅执行第一个匹配的条件,后续条件不再检查。

修正后的代码

#include <stdio.h>

int main() {
    int nscore, sc_score;
    scanf("%d", &nscore);

    if (nscore > 0 && nscore <= 50) sc_score = 0;
    else if (nscore > 50 && nscore <= 60) sc_score = 1;
    else if (nscore > 60 && nscore <= 65) sc_score = 2;
    else if (nscore > 65 && nscore <= 70) sc_score = 3;
    else if (nscore > 70 && nscore <= 80) sc_score = 4;
    else if (nscore > 80 && nscore <= 99) sc_score = 5;
    else if (nscore == 100) sc_score = 6;
    // 处理无效输入(如<=0或>100),避免未初始化变量问题
    else sc_score = -1;

    printf("%d", sc_score);
    return 0;
}

额外建议

  • 补充输入合法性判断:当nscore不在0-100范围内时,设置特殊值(如-1)标识无效输入,避免未初始化变量引发的异常。
  • 调整边界逻辑:根据实际需求调整条件边界,比如若需要包含50分,可将第一个条件改为nscore >= 0 && nscore <= 50。

内容的提问来源于stack exchange,提问作者EintsWaveX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 11:42:49