文件\学生信息录入
编译器: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;
}