编译器: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;
}