C语言成绩管理系统删除信息

void remove(MESSAGE message[])
{
int i,n,num;
int flag=0;
n=ReadMESSAGEFromFILE(message);
printf("请输入要删除学生的学号:");
scanf("%d",&num);
for(i=0;i<n;i++)
{
if(num==message[i].number)
{
message[i].number=message[i-1].number;
strcpy(message[i].name,message[i-1].name);
strcpy(message[i].sex,message[i-1].sex);
strcpy(message[i].birthday,message[i-1].birthday);
message[i].math=message[i-1].math;
message[i].English=message[i-1].English;
message[i].C=message[i-1].C;
flag=1;
}
}
if(flag==0)
{
printf("该学生的信息不存在");
exit(0);
}
else
{
WriteAllMESSAGEtoFILE(message,n);
printf("该学生的信息已删除成功!\n");
}
}

void WriteAllMESSAGEtoFILE(MESSAGE message[],int n)
{
FILE *fp;
int i;
if ((fp=fopen("message.txt","a+"))==NULL)
{
printf("Failure to open message.txt\n");
exit(0);
}
for(i=0;i<n;i++)
{
fprintf(fp,"%15ld",message[i].number);
fprintf(fp,"%10s",message[i].name);
fprintf(fp,"%5s",message[i].sex);
fprintf(fp,"%20s",message[i].birthday);
fprintf(fp,"%3d",message[i].math);
fprintf(fp,"%3d",message[i].English);
fprintf(fp,"%3d",message[i].C);
fprintf(fp,"\n");
}
fclose(fp);
}
这代码有什么问题?为什么一运行在文件里面就会出现乱码,原来的信息也没删除。

void remove(MESSAGE message[]) {
int i,j,n,num;
int flag = 1;
n = ReadMESSAGEFromFILE(message);
printf("请输入要删除学生的学号:");
scanf("%d",&num);
for(i = 0; i < n;i++) {
if(num == message[i].number) {
for(j = i; j < n - 1; ++j)
message[i] = message[i + 1];
printf("该学生的信息已删除成功!\n");
flag = 0;
--n;
break;
}
}
if(flag == 1) printf("该学生的信息不存在。\n");
WriteAllMESSAGEtoFILE(message,n);
}
温馨提示:答案为网友推荐,仅供参考