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

基于switch语句的成绩评级系统代码故障排查与优化请求

成绩评级代码问题排查与优化

问题根源

你这段代码的核心问题是完全误用了switch语句的匹配逻辑:

  • switch是用输入的分数值去匹配case后的常量,比如输入85,switch会找case 85:,但你写的case都是1、2、3这类固定数字,根本匹配不上任何有效分数,所以直接走到default输出F。
  • 无效分数的判断放在case 1:里,只有输入1才会进入这个分支,其他无效值(比如101、-5)根本不会触发这个判断。
  • 每个case里嵌套if,完全浪费了switch的作用,代码冗余且逻辑混乱。

优化后的代码

#include <stdio.h>

int main()
{
    int score;
    printf("请输入0-100之间的成绩:");
    scanf("%d", &score);

    // 先校验输入合法性
    if (score < 0 || score > 100) {
        printf("无效成绩,请输入0-100之间的数值\n");
        return 0;
    }

    // 通过score/10将分数映射到固定区间,适配switch匹配
    switch (score / 10) {
        case 10: // 100分单独处理
        case 9:  // 90-99分
        case 8:  // 80-89分
            printf("A+\n");
            break;
        case 7:  // 70-79分
            printf("A\n");
            break;
        case 6:  // 60-69分
            printf("A-\n");
            break;
        case 5:  // 50-59分
            printf("B\n");
            break;
        case 4:  // 40-49分
            printf("C\n");
            break;
        case 3:  // 32-39分,补充下限判断
            if (score >= 32) {
                printf("D\n");
            } else {
                printf("F\n");
            }
            break;
        default: // 0-31分
            printf("F\n");
            break;
    }

    return 0;
}

优化说明

  • 提前做输入合法性校验,直接拦截无效分数,逻辑更清晰
  • 用score/10将分数段映射为固定整数,完美适配switch的匹配逻辑,避免冗余if判断
  • 合并相同评级的case(比如80-100都对应A+),大幅简化代码结构
  • 针对32-39分的特殊区间,在case3里补充下限判断,严格符合原需求
  • 增加换行和友好提示,提升用户使用体验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:57:18