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

无指针C++成绩统计程序异常:A/B等级计数出现乱码数值

问题原因分析与解决方案

嗨,这问题我太熟了——十有八九是局部变量未初始化搞的鬼!

问题根源

C++里的局部变量(比如你用来统计等级人数的变量)如果不手动初始化,会直接占用栈内存里的随机垃圾值。你说C、D、F统计正常,A、B出异常,大概率是你只给C、D、F的计数器赋了初始值0,却忘了给A、B的计数器初始化。

当输入A/B对应的分数时,程序会在这些随机垃圾值的基础上累加,自然就出现了像907517809这种离谱的数值。而平均分计算正常,是因为你用来算平均分的总分、人数变量应该是初始化过的,没踩这个坑。

修复方案

把所有等级计数器都显式初始化为0就行,比如:

// 原来可能只初始化了C/D/F,现在全部初始化
int countA = 0, countB = 0, countC = 0, countD = 0, countF = 0;

修正后的完整代码示例

#include <iostream>
using namespace std;

int main(){
    // 所有计数器都初始化为0
    int countA = 0, countB = 0, countC = 0, countD = 0, countF = 0;
    int score, totalScore = 0, studentCount = 0;
    char continueInput;

    do {
        cout << "请输入学生成绩:";
        cin >> score;
        
        // 累加总分和人数
        totalScore += score;
        studentCount++;

        // 判定成绩等级并计数
        if (score >= 90 && score <= 100) {
            countA++;
        } else if (score >= 80 && score < 90) {
            countB++;
        } else if (score >= 70 && score < 80) {
            countC++;
        } else if (score >= 60 && score < 70) {
            countD++;
        } else if (score >= 0 && score < 60) {
            countF++;
        } else {
            cout << "输入的成绩无效,请重新输入!" << endl;
            studentCount--; // 无效成绩不计入人数
            totalScore -= score; // 无效成绩不计入总分
        }

        cout << "是否继续输入?(Y/N):";
        cin >> continueInput;
    } while (continueInput == 'Y' || continueInput == 'y');

    // 计算并输出结果
    if (studentCount > 0) {
        double average = static_cast<double>(totalScore) / studentCount;
        cout << "\n成绩统计结果:" << endl;
        cout << "A等级(90-100分)人数:" << countA << endl;
        cout << "B等级(80-89分)人数:" << countB << endl;
        cout << "C等级(70-79分)人数:" << countC << endl;
        cout << "D等级(60-69分)人数:" << countD << endl;
        cout << "F等级(0-59分)人数:" << countF << endl;
        cout << "平均分:" << average << endl;
    } else {
        cout << "没有有效成绩输入!" << endl;
    }

    return 0;
}

额外提醒

以后写C++代码时,所有局部变量都要记得初始化,尤其是用来计数、累加的变量,不然很容易踩这种看起来莫名其妙的坑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:01:48