输入若干个学生的数据存入文件1中,从中挑选出成绩不及格的学生数据放入文件2,并输出文件2中的内容。
思路:新建文件1→写入数据→新建文件2→文件1的数据读出至结构体→结构体中的数据进行筛选并写入文件2→文件2中的数据读出至结构体→输出结构体中的数据
#include <stdio.h>
#include <stdlib.h>
struct stu{
char name[20];
int num;
float score;
};
int main(){
struct stu stud,stud1;
FILE*fp;
fp=fopen("list","wb"); /*二进制只写的方式打开文件list,之前list不存在,故wb操作会新建一个名为list的文件,并用指针fp指向它*/
while(1){
scanf("%s%d%f",stud.name,&stud.num,&stud.score);
if(stud.num<0)
break; /*输入学生数据,以学号出现负数为标志停止输入*/
fwrite(&stud,sizeof(struct stu),1,fp); /*将结构体中的数据写入fp指向的文件(list)*/
}
fclose(fp); /*关闭文件*/
FILE*in=fopen("list","rb"); /*二进制只读方式打开list,用in指针指向*/
FILE*out=fopen("fa","wb"); /*二进制只写方式新建fa*/
while(1){
fread(&stud,sizeof(struct stu),1,in); /*将list中的数据读出存入结构体中*/
if(feof(in))
break; /*到文件末尾则停止循环*/
if(stud.score<60)
fwrite(&stud,sizeof(struct stu),1,out); /*对于每次存入结构体中的数据进行判断,若score<60则写入文件fa中*/
}
fclose(in); /*关闭list文件*/
fclose(out); /*关闭fa文件*/
FILE* fpp=fopen("fa","rb"); /*二进制只读方式打开fa*/
while(1){
fread(&stud1,sizeof(struct stu),1,fpp); /*将fa中的数据读出并存入结构体中*/
if(feof(fpp))
break;
printf("%s %d %f\n",stud1.name,stud1.num,stud1.score);/*每次存入后进行输出,否则数据被覆盖*/
}
fclose(fpp);
return 0;
}