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

如何仅使用FILE指针读取文件数据并计算课程平均分

正确实现课程平均分计算(仅使用FILE指针)

你的代码存在的问题

  • 数据类型不匹配:double类型的成绩必须用%lf读取,你用了%f,会导致数据读取错误
  • 硬编码读取逻辑:一次性写死所有读取参数,代码冗余且不灵活,文件内容变动时必须修改格式串
  • 课程ID初始化错误:你给courseid初始化为1、2、3,和文件里的115、112、122完全不符
  • printf参数错误:输出时传了变量的地址&course[0].courseavg,应该直接传变量本身
  • 未处理文件打开失败:如果input.txt不存在,程序会直接崩溃
  • 平均分计算僵化:固定按2个学生计算,无法适配更多学生的场景

正确实现思路

  1. 定义课程结构体,存储课程ID、总分、修课人数,后续用这两个值计算平均分
  2. 打开文件后先检查是否成功,避免异常崩溃
  3. 循环读取文件每一行数据,直到文件结束
  4. 对每个读取到的课程,匹配对应数组元素,累加总分和人数
  5. 遍历课程数组,计算每个课程的平均分
  6. 格式化输出结果

完整代码实现

#include <stdio.h>

typedef struct {
    int courseid;
    double total;  // 课程总分
    int count;     // 修该课程的学生人数
    double avg;    // 课程平均分
} Course;

int main() {
    // 初始化课程数组,对应文件中的三个课程ID:115、112、122
    Course courses[3] = {
        {115, 0.0, 0, 0.0},
        {112, 0.0, 0, 0.0},
        {122, 0.0, 0, 0.0}
    };

    // 仅使用FILE指针打开文件
    FILE *in = fopen("input.txt", "r");
    if (in == NULL) {
        printf("无法打开文件 input.txt\n");
        return 1;
    }

    int studentid, courseid;
    double grade;
    // 循环读取每一行数据,直到文件结束
    while (fscanf(in, "%d %d %lf", &studentid, &courseid, &grade) == 3) {
        // 匹配对应课程,累加总分和人数
        for (int i = 0; i < 3; i++) {
            if (courses[i].courseid == courseid) {
                courses[i].total += grade;
                courses[i].count++;
                break;
            }
        }
    }

    // 计算每个课程的平均分
    for (int i = 0; i < 3; i++) {
        if (courses[i].count > 0) {
            courses[i].avg = courses[i].total / courses[i].count;
        } else {
            courses[i].avg = 0.0; // 无学生修读时平均分设为0
        }
    }

    // 输出结果
    printf("课程ID\t平均分\n");
    for (int i = 0; i < 3; i++) {
        printf("%d\t%.1f\n", courses[i].courseid, courses[i].avg);
    }

    // 关闭文件
    fclose(in);
    return 0;
}

代码说明

  • 用while(fscanf(...) == 3)循环读取,确保每次读取一行的三个字段,自动处理文件结束
  • 课程数组直接对应文件中的实际课程ID,避免匹配错误
  • 通过total和count统计数据,平均分计算逻辑灵活,支持任意数量的学生
  • 增加文件打开失败的判断,提升程序稳定性
  • 格式化输出结果,可读性更强

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 04:32:08