首先看成绩单的数据结构:
struct
{
char name[10]; //姓名
int score; //成绩
long tt; //记录产生的时间(代码里没涉及)
int crc; //crc就是用来校验的
}tempscore,scorefile[5]; //用于存储游戏成绩
校验函数:
int crc(int p)
{
int i,j=0;
for(i=0;scorefile[p].name[i]&&i<10;i++)j+=scorefile[p].name[i];
j^=scorefile[p].score;
j^=scorefile[p].tt;
if(!scorefile[p].score)j=scorefile[p].crc;
return j;
}
读取成绩单文件时判断校验码是否相等,如不等则说明有人修改了成绩单文件数据,该项成绩直接清零
void loadscore()
{//读取游戏成绩
int i,j;
FILE *f;
for(i=0;i<5;i++)scorefile[i].score=0;
if((f=fopen("score.dat","rb"))==NULL)return;
fread(scorefile,sizeof(scorefile),1,f);
fclose(f);
for(i=0;i<5;i++)
{
if(crc(i)!=scorefile[i].crc)scorefile[i].score=0; //这里判断校验码不相等的处理
}
sortscore();
}
struct
{
char name[10]; //姓名
int score; //成绩
long tt; //记录产生的时间(代码里没涉及)
int crc; //crc就是用来校验的
}tempscore,scorefile[5]; //用于存储游戏成绩
校验函数:
int crc(int p)
{
int i,j=0;
for(i=0;scorefile[p].name[i]&&i<10;i++)j+=scorefile[p].name[i];
j^=scorefile[p].score;
j^=scorefile[p].tt;
if(!scorefile[p].score)j=scorefile[p].crc;
return j;
}
读取成绩单文件时判断校验码是否相等,如不等则说明有人修改了成绩单文件数据,该项成绩直接清零
void loadscore()
{//读取游戏成绩
int i,j;
FILE *f;
for(i=0;i<5;i++)scorefile[i].score=0;
if((f=fopen("score.dat","rb"))==NULL)return;
fread(scorefile,sizeof(scorefile),1,f);
fclose(f);
for(i=0;i<5;i++)
{
if(crc(i)!=scorefile[i].crc)scorefile[i].score=0; //这里判断校验码不相等的处理
}
sortscore();
}