首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

读写数据块函数fread如何用

2012-04-11 
读写数据块函数fread怎么用?本人照题目设计了个程序,想用fread读取数据,结果......题目是:某班有30名学习,

读写数据块函数fread怎么用?
本人照题目设计了个程序,想用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];占多少字节?

[解决办法]
注意文件类型

热点排行