定义学生结构体变量,存储学生的学号,姓名和三门课程的成绩,所有学生数据均以二进制方式输出到文件中,写一个函数实现重写文件中最后一个学生的数据。
#include <stdio.h>
#define NUM 5
typedef struct student{
int num;
char name[20];
long s[3];
}stu;
void Write(stu t[],stu ss[]);
void Repeat(char *filename,stu n);
void Print(stu ss[]);
int main(){
int i,j;
FILE *fp;
stu t[NUM],ss[NUM];
stu n={10005,"zhaosi",55,70,68};
printf("请输入学生信息:\n");
for(i=0;i<NUM;i++){
scanf("%d%s%d%d%d",&t[i].num,t[i].name,&t[i].s[0],&t[i].s[1],&t[i].s[2]);
}
char *filename="student.txt";
Write(t,ss);
Repeat(filename,n);
fp=fopen("student.txt","rb");
fread(ss,sizeof(stu),NUM,fp);
Print(ss);
fclose(fp);
// printf("\nThe original data:\n");
// Print(ss);
return 0;
}
void Write(stu t[],stu ss[]){
FILE *fp;
fp=fopen("student.txt","wb");
fwrite(t,sizeof(stu),NUM,fp);
fclose(fp);
fread(ss,sizeof(stu),NUM,fp);
fclose(fp);
}
void Repeat(char *filename,stu n) {
FILE *fp;
fp=fopen(filename,"rb+");
fseek(fp,-1L*sizeof(stu),SEEK_END);
fwrite(&n,sizeof(stu),1,fp);
fclose(fp);
}
void Print(stu ss[]){
int j;
for(j=0;j<NUM;j++){
printf("\nNo:%ld Name:%-8s Scores:%d %d %d\n",ss[j].num,ss[j].name ,ss[j].s[0],ss[j].s[1],ss[j].s[2]);
}
}