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

使用指针的C语言成绩评分程序——输入4个分数后触发段错误

排查C语言程序段错误(Segmentation Fault)的思路与修复方案

嘿,太懂你遇到段错误那种抓耳挠腮的感觉了!先别慌,段错误本质是程序非法访问了不属于它的内存,结合你输入4个分数就崩溃的场景,咱们从几个最常见的方向排查:

最可能的几个问题点

  • 数组内存越界:比如你定义的分数数组大小小于4(比如double scores[3];),但却往里面塞4个分数,直接踩了不该碰的内存,触发崩溃。
  • 函数参数传递错误:给Average函数传的N值不对(比如传了比实际数组大的数),或者scores指针是空的/指向了非法内存区域。
  • 输入逻辑错误:用scanf读取分数时,没正确传递变量的地址(比如写成scanf("%lf", scores[i])而不是&scores[i]),导致写入了错误的内存地址。
  • 循环边界错误:Average函数里的循环条件写错了(比如i <= N而不是i < N),导致多访问了一个数组元素。

给你一个可参考的正确实现示例

你可以对比自己的代码,看看哪里不一样:

#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS

// 计算平均分的函数,先做参数合法性校验
double Average(double *scores, int N) {
    if (N <= 0 || scores == NULL) {
        printf("参数错误!\n");
        return 0.0;
    }
    double sum = 0.0;
    for (int i = 0; i < N; i++) {
        sum += scores[i];
    }
    return sum / N;
}

// 根据分数获取字母等级
char getGrade(double score) {
    if (score >= 90) return 'A';
    else if (score >= 80) return 'B';
    else if (score >= 70) return 'C';
    else if (score >= 60) return 'D';
    else return 'F';
}

int main() {
    const int STUDENT_NUM = 4;
    double scores[STUDENT_NUM]; // 定义刚好容纳4个分数的数组

    // 输入分数,同时校验输入有效性
    printf("请输入4个学生的成绩:\n");
    for (int i = 0; i < STUDENT_NUM; i++) {
        printf("第%d个成绩:", i+1);
        if (scanf("%lf", &scores[i]) != 1) {
            printf("输入格式错误,请输入数字!\n");
            return 1;
        }
    }

    // 计算并输出平均分
    double classAvg = Average(scores, STUDENT_NUM);
    printf("\n班级平均分:%.2lf\n", classAvg);

    // 输出每个学生的等级
    printf("学生成绩等级:\n");
    for (int i = 0; i < STUDENT_NUM; i++) {
        printf("第%d位:%.2lf -> %c\n", i+1, scores[i], getGrade(scores[i]));
    }

    return 0;
}

快速排查步骤

  1. 先检查你定义的分数数组大小,确保它能容纳至少4个元素;
  2. 看Average函数里的循环,是不是用了i < N的条件;
  3. 检查输入部分的scanf,每个读取分数的语句都要加&取地址(数组元素的地址是&scores[i]);
  4. 如果用了动态内存分配(比如malloc),要确认分配的大小是N * sizeof(double),并且检查malloc的返回值不是NULL。

按照这个思路排查,应该能很快找到问题所在~

内容的提问来源于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:33