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

C语言统计学生成绩A/B/C/D/E各等级数量时结果始终为0怎么办

问题原因分析

你的代码存在3个核心错误导致计数始终为0:

  • 逻辑完全割裂:第一个循环根据输入的分数计算出等级后,仅通过printf打印到了控制台,没有对对应等级的计数器做任何累加操作。第二个getchar循环读取的是用户的键盘输入,不会读取你打印到控制台的输出内容,因此switch的所有等级分支永远不会被触发,计数自然全为0。
  • 语法错误:C等级的计数语句写为+cCount;,遗漏了一个加号,应该是++cCount;,即使逻辑正确也无法正常统计C等级数量。
  • 与需求不符:你的需求是读取成绩直到用户输入EOF,但当前代码先要求用户输入固定的学生数量,和预期的EOF结束逻辑不一致。
修正后的完整代码
#include <stdio.h>

int main()
{
    int score;
    int aCount = 0, bCount = 0, cCount = 0,
        dCount = 0, eCount = 0;

    printf("Enter student score (press Ctrl+D/Ctrl+Z to end): \n");
    // 直接通过scanf返回值判断是否到EOF
    while (scanf("%d", &score) != EOF) {
        if(score >= 80) {
            printf("Student's grade is A\n");
            ++aCount;
        } else if(score >=70) {
            printf("Student's grade is B\n");
            ++bCount;
        } else if(score >=60) {
            printf("Student's grade is C\n");
            ++cCount;
        } else if(score >=50) {
            printf("Student's grade is D\n");
            ++dCount;
        } else {
            printf("Student's grade is E\n");
            ++eCount;
        }
    }

    printf("\n Totals for each letter grade are: \n");
    printf("A: %d\n", aCount);
    printf("B: %d\n", bCount);
    printf("C: %d\n", cCount);
    printf("D: %d\n", dCount);
    printf("E: %d\n", eCount);

    return 0;
}
修正说明
  • 删掉了多余的学生数量输入和第二个读字符的统计循环,直接在判断成绩对应等级的分支中累加对应计数器,避免逻辑割裂。
  • 修复了cCount计数的语法错误。
  • 改用scanf("%d", &score) != EOF作为循环终止条件,符合输入成绩直到EOF的需求。
  • Windows系统下输入EOF按Ctrl+Z,Linux/macOS系统下按Ctrl+D即可结束输入输出统计结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:48:03