void cancle_password_teacher() { char filename[] = "C:\\Users\\32172\\Desktop\\学生管理系统\\教师账号密码.txt"; char tempname[] = "C:\\Users\\32172\\Desktop\\学生管理系统\\temp.txt"; FILE *fp, *temp; char line[100]; fp = fopen(filename, "r"); temp = fopen(tempname, "w"); char id[6]; printf("请输入删除教师工号:"); scanf("%s",&id); while (fgets(line, sizeof(line), fp)) { // 如果不包含匹配字符串,则写入临时文件 if (!strstr(line, id)) { fputs(line, temp); } } fclose(fp); fclose(temp); remove(filename); // 将临时文件重命名为原文件名 rename(tempname, filename); printf("工号为%s的教师信息删除成功,请按任意键返回\n",id); }运行后文件名为temp,并没有改名并且程序有bug
时间: 2024-01-27 15:03:50 浏览: 98
doctor_echo_cancle.rar_DoAEC_canceller_doctor_echo_cancle_echo c
根据你提供的代码,我发现在使用 `fgets` 读取文件中的一行时,可能会读取到换行符。这可能会导致在比较教师工号时出现问题。另外,使用 `scanf` 读取字符串时,不需要使用 `&`,因为字符串本身就是指针。
以下是修复后的代码:
```c
void cancel_password_teacher() {
char filename[] = "C:\\Users\\32172\\Desktop\\学生管理系统\\教师账号密码.txt";
char tempname[] = "C:\\Users\\32172\\Desktop\\学生管理系统\\temp.txt";
FILE *fp, *temp;
char line[100];
fp = fopen(filename, "r");
temp = fopen(tempname, "w");
char id[6];
printf("请输入删除教师工号:");
scanf("%s", id);
while (fgets(line, sizeof(line), fp)) {
// 去掉换行符
line[strcspn(line, "\n")] = '\0';
// 如果不包含匹配字符串,则写入临时文件
if (!strstr(line, id)) {
fputs(line, temp);
fputs("\n", temp);
}
}
fclose(fp);
fclose(temp);
remove(filename);
rename(tempname, filename);
printf("工号为%s的教师信息删除成功,请按任意键返回\n", id);
}
```
这里我们使用了 `strcspn` 函数来找到字符串中的换行符,并将其替换为结束符。另外,在写入临时文件时,需要手动添加换行符,以保证每行之间的正确性。
阅读全文