#include <stdio.h> #include <stdlib.h> typedef struct student { int sno; char name[20]; int score[3]; } Student; int main() { FILE *fp; Student stu; fp=fopen("f1.dat","wb"); if(fp==NULL) {printf("cannot open"); exit(1); } int sno; scanf("%d",&sno); while(sno!=0) { stu.sno=sno; scanf("%s",&stu.name); scanf("%d %d %d",&stu.score[0],&stu.score[1],&stu.score[2]); fwrite(&stu,sizeof(struct student),1,fp); scanf("%d",&sno); } fclose(fp); fp = fopen("f1.dat", "rb"); if (fp == NULL) { printf("cannot open"); exit(1); } // 循环读取每个学生的信息,并打印输出 while (fread(&stu, sizeof(struct student), 1, fp) == 1) { printf("sno: %d\n", stu.sno); printf("name: %s\n", stu.name); printf("score1: %d, score2: %d, score3: %d\n", stu.score[0], stu.score[1], stu.score[2]); printf("\n"); } fclose(fp); return 0; }这串代码中如何实现文件数据的增加或者删除代码,请写一下
时间: 2024-01-28 14:04:34 浏览: 65
SeqList.h #include <stdio.h> //包含标准输入输出流的头文件 #include <assert.h
要实现文件数据的增加,可以使用"a+"模式打开文件,将新的数据写入文件末尾;要实现文件数据的删除,可以通过重新写入文件的方式,将需要删除的数据从文件中剔除。
增加数据的代码示例:
```c
fp=fopen("f1.dat","a+"); //以"a+"模式打开文件
if(fp==NULL) {
printf("cannot open");
exit(1);
}
int sno;
scanf("%d",&sno);
while(sno!=0) {
stu.sno=sno;
scanf("%s",&stu.name);
scanf("%d %d %d",&stu.score[0],&stu.score[1],&stu.score[2]);
fwrite(&stu,sizeof(struct student),1,fp); //将新的数据写入文件末尾
scanf("%d",&sno);
}
fclose(fp);
```
删除数据的代码示例:
```c
fp=fopen("f1.dat","rb"); //先以"rb"模式打开文件,读取数据
if(fp==NULL) {
printf("cannot open");
exit(1);
}
int sno_del;
scanf("%d",&sno_del);
FILE *fp_tmp=fopen("f1.tmp","wb"); //打开一个临时文件,用于存储剔除后的数据
if(fp_tmp==NULL) {
printf("cannot open");
exit(1);
}
while(fread(&stu,sizeof(struct student),1,fp)==1) { //遍历文件中的所有数据
if(stu.sno!=sno_del) { //如果不是需要删除的数据,则将其写入临时文件中
fwrite(&stu,sizeof(struct student),1,fp_tmp);
}
}
fclose(fp);
fclose(fp_tmp);
remove("f1.dat"); //删除原文件
rename("f1.tmp","f1.dat"); //将临时文件重命名为原文件名
```
阅读全文