结构体的班级学生管理:加入班级学生信息文件的读写功能。采用二进制方式读写文件
分为当前目录中是否存在文件名为计算机1班的两种情况,如果不存在,就创建该文件;如果存在,就直接读入。但都要首先读入(输入写入)学生的人数,再读入(输入写入)其它信息。
下面是我写的代码
#include<stdio.h>
#include<malloc.h>
typedef struct student
{
int number;
char name[20];
union
{
unsigned int all:25;
struct
{
unsigned int year:16;
unsigned int month:4;
unsigned int day:5;
}d1;
}date;
enum sex
{
boy=1,girl=2
}var;
float score[4];
double sum;
double average;
}STU;
void main()
{
STU st[20];
STUstudents=NULL;
FILEp;
int n,i,j;
p=fopen("d:\计算机1班.dat","rb");
if(p==NULL)
{
p=fopen("d:\计算机1班.dat","wb");
printf("输入学生数量:");
scanf("%d",&n);//先输入人数
students=(STU*)calloc(n,sizeof(STU));//据此分配内存空间
for(i=0;i<n;i++)//逐个录入学生信息
{
printf("输入第%d个同学的学号 姓名 出生日期(8位连续输入,只有个位用零补齐) 性别(男生输1,女生输2):",i+1);
scanf("%d%s%d%d",&st[i].number,st[i].name,&st[i].date,&st[i].var);
for(j=0;j<4;j++)
{
printf("输入第%d个同学第%d科成绩:",i+1,j+1);
scanf("%f",&st[i].score[j]);
}
}
fwrite(&n,4,1,p);//首先将人数写入到班级文件中,1个int,4个字节
fwrite(st,sizeof(STU),n,p);//再将所有学生的信息写入到文件中
}
else if(p!=NULL)
{
//首先读入学生人数(1个int)
//据此动态分配学生结构体数组
//然后从文件剩余部分读入所以学生信息
}
//最后释放动态分配的内存
}
在输入第一个同学的第一个成绩后程序就会出现错误中止,为什么呢?
还有如果文件存在,首先读入学生人数的功能是怎么实现的?然后又是怎么动态分配内存?从剩余部分继续读入学生信息的?实在不明白,麻烦在我的基础上修改和补充,但定义的结构体不要变,多谢了