本人照题目设计了个程序,想用fread读取数据,结果......
题目是:某班有30名学习,每名学生的数据包括学号、姓名、3门课的成绩,输入20名学生的数据,要求打印出3门课总平均成绩,以及总分最高的学生的数据(包括学号、姓名、3门课成绩,平均成绩)。
#include <stdio.h>
struct student
{ long num;
char name[10];
float score[3];
} stu[20];
float SUM(float *a)
{ int i;
float sum=0;
for(i=0;i<3;i++)
sum+=*(a+i);
return sum;
}
void main()
{
FILE *fp;
int i,j=0,k;
float sum=0,aver,max;
clrscr();
if((fp=fopen("data.txt","r"))==NULL)
{
printf("Can't open this file\n");exit(0);
}
for(i=0;i<20;i++)
{ fread(&stu[i],sizeof(struct student),1,fp);/* 使用读写数据块函数fread,结果运行得不到正确答案 */
/* 如果用后面这种格式化读写一点错都没有:
fscanf(fp,"%ld%s%f%f%f",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);*/
sum=sum+SUM(stu[i].score);
}
aver=sum/60;
printf("Average score is: %5.2f\n",aver);
max=SUM(stu[0].score);
while(j<20)
{
if(max<SUM(stu[j].score))
{
max=SUM(stu[j].score);
k=j;
}
j++;
}
printf("Date of the highest score students:\nnumber: %ld\nname: %s\nscore:%5.2f %5.2f %5.2f\naverage score:%5.2f\n",stu[k].num,stu[k].name,stu[k].score[0],stu[k].score[1],stu[k].score[2],max/3);
fclose(fp);
}
其中"data.txt"如下:
200501 zhao 78 79 79
200502 qian 79 89 89
200503 sun 87 89 90
200504 li 90 97 86
200505 zhou 78 76 89
200506 wu 90 87 76
200507 zheng 78 89 89
200508 wang 89 87 88
200509 liu 88 87 76
200510 ji 89 88 87
200511 xu 89 89 89
200512 xue 87 76 76
200513 wei 89 80 90
200514 zhu 95 91 87
200515 zhuo 87 89 81
200516 zhang 76 78 71
200517 sheng 87 85 79
200518 shao 70 90 99
200519 feng 87 85 78
200520 yu 87 81 82
初学C语言,不知道是什么原因,望高手赐教!
初步怀疑是sizeof(struct student)所计算出的字节数有误,请问float score[3];占多少字节?