耒阳一中 2022-12-25 10:55 采纳率: 81.3%
浏览 43
已结题

C语言文件操作编程问题

img


#include <stdio.h>
#include <stdlib.h>

#define NUM_STUDENTS 5
#define NUM_COURSES 3

typedef struct {
    int student_number;
    char name[20];
    float courses[NUM_COURSES];
    float average;
} Student;

int main(int argc, char *argv[]) {
    if (argc != 2) {
        printf("Usage: %s file_name\n", argv[0]);
        return 1;
    }
    char *file_name = argv[1];

    Student students[NUM_STUDENTS];
    for (int i = 0; i < NUM_STUDENTS; i++) {
        printf("Enter student number: ");
        scanf("%d", &students[i].student_number);
        printf("Enter name: ");
        scanf("%s", students[i].name);
        for (int j = 0; j < NUM_COURSES; j++) {
            printf("Enter course %d score: ", j + 1);
            scanf("%f", &students[i].courses[j]);
        }
        students[i].average = (students[i].courses[0] + students[i].courses[1] + students[i].courses[2]) / NUM_COURSES;
    }

    FILE *fp = fopen(file_name, "wb");
    if (fp == NULL) {
        perror("Error opening file");
        return 1;
    }

    for (int i = 0; i < NUM_STUDENTS; i++) {
        fwrite(&students[i], sizeof(Student), 1, fp);
    }

    fclose(fp);

    return 0;
}
嗯,输出结果就是比较不成功。嗯,想要大家再帮我看看代码
  • 写回答

2条回答 默认 最新

  • a5156520 2022-12-25 11:47
    关注

    输出没问题,只要把平均成绩保留两位后在保存即可,另外可以用fread()函数再次读取文件并打印,以验证写入的数据是否正确,修改如下:

    参考链接:

    #include <stdio.h>
    #include <stdlib.h>
     
    #define NUM_STUDENTS 5
    #define NUM_COURSES 3
     
    typedef struct {
        int student_number;
        char name[20];
        float courses[NUM_COURSES];
        float average;
    } Student;
     
    int main(int argc, char *argv[]) {
        if (argc != 2) {
            printf("Usage: %s file_name\n", argv[0]);
            return 1;
        }
        char *file_name = argv[1];
     
        Student students[NUM_STUDENTS];
        double avg;
        char temp[20]; 
        for (int i = 0; i < NUM_STUDENTS; i++) {
            printf("Enter student number: ");
            scanf("%d", &students[i].student_number);
            printf("Enter name: ");
            scanf("%s", students[i].name);
            for (int j = 0; j < NUM_COURSES; j++) {
                printf("Enter course %d score: ", j + 1);
                scanf("%f", &students[i].courses[j]);
            }
            
           
            avg= (students[i].courses[0] + students[i].courses[1] + students[i].courses[2]) / NUM_COURSES;
            // https://baike.baidu.com/link?url=_FbRjX1l4bRnFF8hQoqlw9-2HhQr4LDM-23DwSSLil86L0OO-bz5NDL5ljll4dgf47xbtOgMOF1Ny5MCFw67d0BOAsOgb2hbg1VpKI6WcsO
            sprintf(temp,"%.2f",avg);  //   平均成绩保留两位小数 保存为字符串 
            // https://www.runoob.com/cprogramming/c-function-atof.html
            students[i].average = (float)(atof(temp));  // 把保留两位小数的字符串转为浮点数 
        }
     
        FILE *fp = fopen(file_name, "wb");
        if (fp == NULL) {
            perror("Error opening file");
            return 1;
        }
     
        for (int i = 0; i < NUM_STUDENTS; i++) {
            fwrite(&students[i], sizeof(Student), 1, fp);
        }
     
        fclose(fp);
        
        // 读取文件验证写入的数据是否正确 
        fp = fopen(file_name, "r");
        if (fp == NULL) {
            perror("Error opening file");
            return 1;
        }
         Student rstudents[NUM_STUDENTS];
         printf("\n");
        for (int i = 0; i < NUM_STUDENTS; i++) {
            fread(&rstudents[i], sizeof(Student), 1, fp);
        }
        for (int i = 0; i < NUM_STUDENTS; i++) {
            printf("%d %s %f %f %f %f\n",rstudents[i].student_number,rstudents[i].name,
            rstudents[i].courses[0],rstudents[i].courses[1],rstudents[i].courses[2],rstudents[i].average);
        }
        
        fclose(fp);
     
        return 0;
    }
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月26日
  • 已采纳回答 12月26日
  • 请详细说明问题背景 12月25日
  • 创建了问题 12月25日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效