#include
#include
#include
typedef struct user{
char name[20]; //玩家用户名
double score; //游戏所用时间
}User;
void sortByName() ;
void setRecord() //写入文件记录
{
User use[5]={{"xiangwang",7},{"xiangli",2},{"xiangzhang",5},{"q",4},{"w",3}};
FILE *fp;
fp=fopen("D:\\timerank.dat","wb");
if(fp==0)
{
printf("写入失败\n");
exit(1);
}
fwrite(use,sizeof(use),1,fp);
fclose(fp);
sortByName();
}
void sortByName() //储存到文件,排序后输出
{
int choose;
int i,j;
int k=1;
User TempS;/* 定义进行操作时的临时结构体变量 */
User s[10];
int recNumber=0;
FILE *fp=NULL;
fp=fopen("D:\timerank.dat","rb");
/* 将文件中要排序的信息存入结构体数组 */
while(fread(&s[recNumber],sizeof(User),1,fp)!=0)
{
recNumber++;
}
fclose(fp);
for(i=0;i<recNumber-1;i++)
{
for(j=0;j<recNumber-1-i;j++)
{
if(s[j].score>s[j+1].score)
{
strcpy(TempS.name,s[j].name);
strcpy(s[j].name,s[j+1].name);
strcpy(s[j+1].name,TempS.name);
/*TempS.name=s[j].name;
s[j].name=s[j+1].name;
s[j+1].name=TempS.name;*/
TempS.score=s[j].score;
s[j].score=s[j+1].score;
s[j+1].score=TempS.score;
}
}
/* 将排序好的记录写入文件 */
fp=fopen("D:\\timerank.dat","wb");
for(i=0;i<recNumber;i++)
{
fwrite(&s[i],sizeof(User),1,fp);
}
fclose(fp);
}
}
void print()
{ User TempS;/* 定义进行操作时的临时结构体变量 */
int choose;
int k=1;
FILE *fp;
fp=fopen("D:\timerank.dat","rb");
if(fp==NULL)
{
printf("文件错误\n");
}
printf("排名\t玩家姓名\t\t所用时间\n");
while(fread(&TempS,sizeof(User),1,fp)!=0)
{ if(k<6){
printf("%d\t%s\t\t%lf\n",k++,TempS.name,TempS.score);
}
}
fclose(fp);
}
int main()
{
setRecord();
sortByName();
print();
}
输出结果并不能完全排序呢?