编译器:vs2010
文件操作里值得一提的是:如果文件不存在,新生成的文件会出现在源码同目录下,而不是和解决方案同一目录下(如果是指定的绝对路径就想放哪里就放哪里,但是不好移植)
#include<stdio.h> #include<stdlib.h> #define N 40 //定义结构体 typedef struct student { char id[20]; char name[30]; int age; double score; }stu; FILE* CreateFile(stu stu1[],int numofstu) { FILE *fp; int i; //打开文件 fp=fopen("./Info.dat","wb"); if(fp==0) { printf("file error\n"); exit(1); } for(i=0;i<numofstu;i++) { printf("请输入(%d/%d):",i+1,numofstu); scanf("%s%s%d%lf",stu1[i].id,stu1[i].name,&stu1[i].age,&stu1[i].score); } fwrite(stu1,sizeof(stu),numofstu,fp); fclose(fp); return fp; } void Sort(int num,stu stu2[]) { int i; stu tmp; for(i=0;i<num-1;i++) { if(stu2[i].score<stu2[i+1].score) { tmp=stu2[i]; stu2[i]=stu2[i+1]; stu2[i+1]=tmp; } } } FILE* ReadOut(int num,stu stu2[]) { FILE *fp; int i=0; //读取文件内容 fp=fopen("./Info.dat","rb"); if(fp==0) { printf("file error\n"); exit(1); } rewind(fp); fread(&stu2[i],sizeof(stu),1,fp); while(!feof(fp)) { i++; fread(&stu2[i],sizeof(stu),1,fp); } num=i; Sort(num,stu2); for(i=0;i<num;i++) printf("%s %s %d %f\n",stu2[i].id,stu2[i].name,stu2[i].age,stu2[i].score); fclose(fp); return fp; } int main() { //初始化 FILE *fp; stu stu1[N]={}; stu stu2[N]; int num=0,numofstu; printf("num of students?"); scanf("%d",&numofstu); fp=CreateFile(stu1,numofstu); //读取 fp=ReadOut(num,stu2); //关闭文件 //fclose(fp); printf("操作完成\n已关闭文件\n"); system("pause"); return 0; }