我已经有一个学生信息文本
在这里我想理由文件打开方式的“w"方式进行删除某一个学生的信息,程序运行正常,但是文本内容并没有改变,
恳请指点指点我哪里错了,我已经很努力的调试了,但仍没有成效。
struct score
{
char id[8];
char name[11];
float gaoshu;
float lisan;
float luoji;
float gpa_gaoshu;
float gpa_lisan;
float gpa_luoji;
float gpa;
int rank;//排名
};
int cancle(int n)
{
struct score st[100];
struct score sub[99];
char id[8];
int find=0;
printf("请输入你要删除的学生学号:");
scanf("%s", &id);
FILE *fp;
fp=fopen("学生成绩管理2.txt","r");
if(fp==NULL)
{
printf("打开文件失败,请联系管理员\n");
getch();
return -1;
}
int c=0;
int index=0;//用于记录目标序号
while(!feof(fp))
{
fscanf(fp,"%s %s %f %f %f %f %f %f %f %d\n",st[c].id,st[c].name,st[c].gaoshu,st[c].lisan,st[c].luoji,st[c].gpa_gaoshu,st[c].gpa_lisan,st[c].gpa_luoji,st[c].gpa,st[c].rank);
if(strcmp(id,st[c].id)==0)
{
find = 1;
index = c;
}
c++;
}
fclose(fp);
if(n==0)
{
printf("已经没有学生成绩信息了,请按任意键返回\n");
getch();
showmenu();
return n;
}
if(find==0)
{
printf("没有该学生成绩信息,请按任意键返回\n");
getch();
showmenu();
return n;
}
else
{
int i;
//删除
for(i=0;i<c;i++)
{
if(i < index)
{
sub[i] = st[i];
}
else
{
sub[i] = st[i+1];
}
}
FILE *fp2;
fp2=fopen("学生成绩管理3.txt","w");
for(i=0;i<c-1;i++)
{
fprintf(fp2,"%s %s %f %f %f %f %f %f %f %d\n",sub[i].id,sub[i].name,sub[i].gaoshu,sub[i].lisan,sub[i].luoji,sub[i].gpa_gaoshu,sub[i].gpa_lisan,sub[i].gpa_luoji,sub[i].gpa,sub[i].rank);
}
fclose(fp2);
printf("学号为%s的学生成绩删除成功,请按任意键返回\n",id);
getch();
showmenu();
return n-1;
}
}
我的文本格式
1001 leo 100.00 100.00 100.00 64.00 64.00 64.00 192.00 0
1002 mary 99.00 99.00 99.00 63.90 63.90 63.90 191.70 0
1003 erin 60.00 60.00 60.00 0.00 0.00 0.00 0.00 0
1004 dennle 80.00 80.00 80.00 62.00 62.00 62.00 186.00 0
1005 kin 20.00 90.00 70.00 0.00 63.00 61.00 124.00 0
1006 bore 90.00 80.00 50.00 63.00 62.00 0.00 125.00 0
1007 wake 80.00 80.00 90.00 62.00 62.00 63.00 187.00 0
1008 cid 78.00 76.00 88.00 61.80 61.60 62.80 186.20 0
1009 cold 87.00 78.00 86.00 62.70 61.80 62.60 187.10 0
1010 summy 76.00 65.00 45.00 61.60 60.50 0.00 122.10 0
1011 hot 60.00 60.00 60.00 0.00 0.00 0.00 0.00 0
1012 cool 59.00 50.00 50.00 0.00 0.00 0.00 0.00 0
1013 hand 80.00 10.00 78.00 62.00 0.00 61.80 123.80 0
1014 rool 80.00 30.00 40.00 62.00 0.00 0.00 62.00 0
1015 roof 78.00 57.00 87.00 61.80 0.00 62.70 124.50 0
1016 wave 87.00 77.00 66.00 62.70 61.70 60.60 185.00 0
1017 like 99.00 77.00 77.00 63.90 61.70 61.70 187.30 0
1018 heud 28.00 88.00 76.00 0.00 62.80 61.60 124.40 0
1019 tghde 76.00 80.00 20.00 61.60 62.00 0.00 123.60 0
1020 yehdy 77.00 77.00 66.00 61.70 61.70 60.60 184.00 0