请帮我修改上述代码
时间: 2024-02-19 22:58:26 浏览: 22
好的,这里给你一个修改后的代码,你可以参考一下:
```c
void modify_password_student(char id[]){
Password st[100];
Password sub[99];
int find=0;
FILE *fp;
fp=fopen("学生账号密码.txt","r");
if(fp==NULL)
{
printf("打开文件失败,请联系管理员\n");
getchar();
exit(-1);
}
int c=0;
int index=0;//用于记录目标序号
while(!feof(fp))
{
fscanf(fp,"%s %s\n",&st[c].id,&st[c].pass_word);
if(strcmp(id,st[c].id)==0)
{
find = 1;
index = c;
}
c++;
}
fclose(fp);
if(find==0)
{
printf("没有该学生信息,请按任意键返回\n");
getchar();
}
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("学生账号密码.txt","w");
for(i=0;i<c-1;i++)
{
fprintf(fp2,"%s %s\n",sub[i].id,sub[i].pass_word);
}
fclose(fp2);
}
FILE *fp3;
fp3=fopen("学生账号密码.txt","a+");
if(fp3==NULL)
{
printf("打开文件失败,请重试!\n");
getch();
exit(0);
}
char paword[13];
char paword2[13];
while(1){
system("cls");
printf("请输入新密码:\n");
scanf("%s",paword);
printf("请重复新密码:\n");
scanf("%s",paword2);
if(strcmp(paword,paword2)==0){
break;
}
else{
printf("俩次密码不一致\n");
Sleep(2000);
}
}
fprintf(fp3,"%s %s\n",id,paword2);
fclose(fp3);
printf("修改账号密码成功");
getch();
}
```
这个代码的修改主要是在修改密码后的写入文件部分。首先,我们使用一个临时数组`sub`将读取的所有数据存储下来;然后,我们使用"w"模式打开文件`fp2`并将`sub`数组中的数据全部写回文件;最后,我们使用"a+"模式打开文件`fp3`,将新密码追加写入文件即可。这样就避免了文件格式变化和乱码的问题。