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 21:01:57 浏览: 74
这可能是由于你写入文件的方式不正确导致的。在修改密码后,你重新打开了同一个文件,但是使用了"w"模式打开,这会清空文件内容并写入修改后的密码。但是由于你没有将读取的其他数据重新写入文件,所以它们变成了乱码。另外,使用"w"模式打开文件会将文件格式默认为ANSI,所以你的文件格式也会发生变化。
为了解决这个问题,你可以在修改密码后,先将读取的所有数据写入一个临时数组中,然后再将其全部写回文件。同时,你可以使用"a+"模式打开文件,这样你就可以将新密码追加写入文件,而不会清空文件内容。这样可以避免乱码问题和文件格式变化的问题。
相关问题
void modify_student_info()是什么意思
void modify_student_info() 是一个函数的声明,它表示这是一个不带参数、不返回值的函数,函数名为modify_student_info。这个函数名字的意思是修改学生信息,它可能实现对学生信息进行修改的功能。但是由于这只是一个函数声明,我们无法确定这个函数的具体实现和功能,需要查看函数的定义才能确定。
/* 学生信息结构体 */ struct student_info { int id; }; /* 注册新学生 */ void register_student(struct student_info *info) { // TODO: 实现注册逻辑 } /* 修改学生信息 */ void modify_student_info(struct student_info *info) { // TODO: 实现修改逻辑 } /* 查看宿舍分配情况 */ void view_dormitory_allocation(struct student_info *info) { // TODO: 实现查看宿舍逻辑 }实现逻辑
好的,根据你提供的代码片段,我可以为你提供一些较为通用的实现逻辑,但需要注意的是,具体实现细节需要根据你的具体需求进行修改。
首先,对于注册新学生的逻辑,一般来说,我们需要实现以下几个步骤:
1. 输入学生信息
2. 生成学生唯一ID
3. 将学生信息和ID存储到学生信息数据库中
具体实现代码如下:
```C
void register_student(struct student_info *info) {
// 1. 输入学生信息
printf("请输入学生ID:");
scanf("%d", &(info->id));
// TODO: 输入其他学生信息
// 2. 生成学生唯一ID
// TODO: 实现生成唯一ID的逻辑
// 3. 将学生信息和ID存储到学生信息数据库中
// TODO: 实现将信息存储到数据库中的逻辑
}
```
对于修改学生信息的逻辑,我们可以实现以下几个步骤:
1. 根据学生ID从学生信息数据库中查找学生信息
2. 修改学生信息
3. 将修改后的学生信息存储到学生信息数据库中
具体实现代码如下:
```C
void modify_student_info(struct student_info *info) {
// 1. 根据学生ID从学生信息数据库中查找学生信息
// TODO: 实现从数据库中查找学生信息的逻辑
// 2. 修改学生信息
// TODO: 实现修改学生信息的逻辑
// 3. 将修改后的学生信息存储到学生信息数据库中
// TODO: 实现将修改后的信息存储到数据库中的逻辑
}
```
最后,对于查看宿舍分配情况的逻辑,我们可以实现以下几个步骤:
1. 从宿舍信息数据库中查找宿舍分配情况
2. 显示宿舍分配情况
具体实现代码如下:
```C
void view_dormitory_allocation(struct student_info *info) {
// 1. 从宿舍信息数据库中查找宿舍分配情况
// TODO: 实现从数据库中查找宿舍分配情况的逻辑
// 2. 显示宿舍分配情况
// TODO: 实现将宿舍分配情况显示给用户的逻辑
}
```
希望这些代码片段可以帮助你实现你的需求。
阅读全文
相关推荐
















