你的strl键没了 发表于 2020-5-29 21:48:18

从文件获得学生信息,计算每名学生的平均成绩及名次。将结果保存到到文件

为什么我感觉我没有成功读入数据,哪里出了问题?顺便提示一些后面怎么排序呢?
#include<stdio.h>
#include<stdlib.h>
struct student
{
        int number;
        char name;
        double score;
};
int main()
{
        struct student stu; int i,j; double ave;
        FILE *fp1, *fp2;
        if( (fp1=fopen("student1.txt","r"))==NULL){
                printf("The file cannot open");
                exit(0);
        }
        for(i=0;i<10;i++){
                fread(stu,sizeof(struct student),1,fp1);
        }
        rewind(fp1);
        for(i=0;i<10;i++){
                for(j=0;j<3;j++){
                        ave=ave+stu.score;
                }
        }
        fclose(fp1);
        return 0;
}

永恒的蓝色梦想 发表于 2020-5-29 21:53:03

鱼币

青出于蓝 发表于 2020-5-29 21:53:04

鱼币

你的strl键没了 发表于 2020-5-29 21:54:39

永恒的蓝色梦想 发表于 2020-5-29 21:53
鱼币

?为了骗鱼币这么不择手段吗

赚小钱 发表于 2020-5-29 22:03:02

你的程序没有输出,你怎么知道,自己执行的对还是错?

Line 18:
要么没有循环, 改成 fread(stu,sizeof(struct student),10,fp1);
要么有循环,改成 fread(&stu,sizeof(struct student),1,fp1);

Line 23:
使用了未初始化的 ave

你的strl键没了 发表于 2020-5-29 22:27:23

赚小钱 发表于 2020-5-29 22:03
你的程序没有输出,你怎么知道,自己执行的对还是错?

Line 18:


不知道为什么输出全是0,还夹杂一些很大的数字

赚小钱 发表于 2020-5-29 22:46:46

你的strl键没了 发表于 2020-5-29 22:27
不知道为什么输出全是0,还夹杂一些很大的数字

全是0,我推测是,你读取数据 stu 没有偏移,一直在写入首地址,数组后面的元素没有写入数据。
很大的数字是因为 ave 数组没有初始化。

可以试着按我说的方案,修改一下。自己改 bug 收获最大。

你的strl键没了 发表于 2020-5-30 08:39:11

赚小钱 发表于 2020-5-29 22:46
全是0,我推测是,你读取数据 stu 没有偏移,一直在写入首地址,数组后面的元素没有写入数据。
很大的数 ...

行,我自己修改一下,谢谢
页: [1]
查看完整版本: 从文件获得学生信息,计算每名学生的平均成绩及名次。将结果保存到到文件