傅欽 2022-12-24 18:50 采纳率: 100%
浏览 84
已结题

c语言文件写入问题,输出结果有问题

问题如下:有五个学生,每个学生有3门课的成绩,从键盘输入相关数据(包括:学号,姓名和三门课程的成绩),计算出平均成绩,并将原有的数据和计算出的平均分数存放在磁盘文件"stud.txt"中
代码

#include"stdio.h"
#include<stdio.h>
#define N 5
struct student
{
int num;
char name[5];
int c1;
int c2;
int c3;
int all;
};
void main()
{
    struct student st[N];
    int i,j,m;
    float ar[5];
    printf("请分别输入这五个学生的学号、姓名以及三门课的成绩:\n");
    float ar1=0,ar2=0,ar3=0,ar4=0,ar5=0;
    for(i=0;i<N;i++)
    {
        scanf("%d",&st[i].num);
        scanf("%s",st[i].name);
        scanf("%d",&st[i].c1);
        scanf("%d",&st[i].c2);
        scanf("%d",&st[i].c3);
        st[i].all = st[i].c1 + st[i].c2 + st[i].c3;
       }
       for(j=0;j<5;j++)
       {
       ar[i]=st[0].all/3;
       }
        FILE *fp;
        fp=fopen("stud.txt","w");
        fprintf(fp,"学号 姓名 成绩 平均分\n ");
        for(m=0;m<5;m++)
        fprintf(fp," %d %s %5d %5d %5d %.2f\n",st[m].num,st[m].name,st[m].c1,st[m].c2,st[m].c3,ar[m]);
        fclose(fp);
}

运行结果有点问题,估计是后半部分的原因,但不知道怎么改

img

  • 写回答

6条回答 默认 最新

  • 语言-逆行者 2022-12-24 19:17
    关注

    你的代码修改过后的:

    #include"stdio.h"
    #include<stdio.h>
    #define N 5
    struct student
    {
    int num;
    char name[5];
    int c1;
    int c2;
    int c3;
    float avg;
    };
    void main()
    {
        struct student st[N];
        int i,j,m;
        printf("请分别输入这五个学生的学号、姓名以及三门课的成绩:\n");
        float ar1=0,ar2=0,ar3=0,ar4=0,ar5=0;
        FILE *fp;
        for(i=0;i<N;i++)
        {
            scanf("%d",&st[i].num);
            scanf("%s",st[i].name);
            scanf("%d",&st[i].c1);
            scanf("%d",&st[i].c2);
            scanf("%d",&st[i].c3);
            st[i].avg = (st[i].c1 + st[i].c2 + st[i].c3)/3.0;
       }
         fp=fopen("stud.txt","w");
       fprintf(fp,"学号 姓名 成绩 平均分\n ");
       for(m=0;m<5;m++)
       {
            fprintf(fp,"%d  %s  %d  %d  %d  %f\n",st[m].num,st[m].name,st[m].c1,st[m].c2,st[m].c3,st[m].avg);
       }
        fclose(fp);
    }
    
    

    我按照题目写的全部代码:
    运行结果示例:

    img

    写入文件内容示例:

    img

    #include<stdio.h>
    #define N 5
    typedef struct Student{
    long long int id;
    char name[20];
    float chinese;
    float math;
    float english;
    float avg;
    }Student;
    Student student[N];
    Student student1[N];
    /**控制台录入信息*/
    void insert(Student student[N])
    {
        int i;
        for(i=0;i<N;i++)
        {
            printf("请输入第%d位学生的信息:\n",i+1);
            scanf("%lld %s %f %f %f",&student[i].id,student[i].name,&student[i].chinese,&student[i].math,&student[i].english);
            student[i].avg=(student[i].chinese+student[i].math+student[i].english)/(3*1.0);
        }
    }
    /**信息存储到stud.txt文件*/
    void ctrl_s(Student student[N])
    {
       FILE*f;
       int i;
       f=fopen("stud.txt","w");
       for(i=0;i<N;i++)
       {
          fprintf(f,"%lld\t%s\t%f\t%f\t%f\t%f\n",
          student[i].id,student[i].name,student[i].chinese,student[i].math,student[i].english,student[i].avg);
       }
       fclose(f);
    }
    void print(Student student1[N])
    {
       FILE*f;
       int i;
       f=fopen("stud.txt","r");
       if(f==NULL){printf("文件打开失败!\n");}
       else
       {
       for(i=0;i<N;i++)
       {
          fscanf(f,"%lld\t%s\t%f\t%f\t%f\t%f\n",
          &student1[i].id,student1[i].name,&student1[i].chinese,&student1[i].math,&student1[i].english,&student1[i].avg);
       }
       for(i=0;i<N;i++)
       {
           printf("学号:%lld 姓名:%s 语文:%.2f 数学:%.2f 英语:%.2f 平均分:%.2f\n",
          student1[i].id,student1[i].name,student1[i].chinese,student1[i].math,student1[i].english,student1[i].avg);
       }
       }
       fclose(f);
    }
    int main()
    {
        insert(student);
        ctrl_s(student);
        printf("学生信息如下:\n");
        print(student1);
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 1月2日
  • 已采纳回答 12月25日
  • 创建了问题 12月24日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀