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(fp,"%s %s\n",st[c].id,st[c].pass_word); } fclose(fp2); } FILE *fp3; fp3=fopen("学生账号密码.txt","a+"); if(fp==NULL) { printf("打开文件失败,请重试!\n"); getch(); fclose(fp3); 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(); } 改完密码后,除了修改的密码其他存储数据变成乱码,并且文本格式由uf8变成ANSI
时间: 2024-01-18 15:01:57 浏览: 70
这可能是由于你写入文件的方式不正确导致的。在修改密码后,你重新打开了同一个文件,但是使用了"w"模式打开,这会清空文件内容并写入修改后的密码。但是由于你没有将读取的其他数据重新写入文件,所以它们变成了乱码。另外,使用"w"模式打开文件会将文件格式默认为ANSI,所以你的文件格式也会发生变化。
为了解决这个问题,你可以在修改密码后,先将读取的所有数据写入一个临时数组中,然后再将其全部写回文件。同时,你可以使用"a+"模式打开文件,这样你就可以将新密码追加写入文件,而不会清空文件内容。这样可以避免乱码问题和文件格式变化的问题。
阅读全文