void delete_student() { char id[MAX_ID_LEN]; printf("请输入要删除的学生学号:"); scanf("%s", id); getchar(); // 把换行符读掉 FILE *fp = fopen("students.dat", "r"); FILE *fp_tmp = fopen("students.tmp", "w"); char line[MAX_LINE_LEN]; int deleted = 0; while (fgets(line, sizeof(line), fp)) { char tmp_id[MAX_ID_LEN]; sscanf(line+MAX_NAME_LEN*2+MAX_CLASS_LEN+3, "%s", tmp_id); if (strcmp(tmp_id, id) == 0) { deleted = 1; continue; } fputs(line, fp_tmp); } fclose(fp); fclose(fp_tmp); if (deleted) { remove("students.dat"); rename("students.tmp", "students.dat"); printf("删除成功!\n"); } else { remove("students.tmp"); printf("找不到该学生!\n"); } }
时间: 2024-03-18 08:44:45 浏览: 46
删除学生信息
5星 · 资源好评率100%
这段代码定义了一个名为 delete_student 的函数,用于从学生信息表格中删除一条学生记录。函数首先声明了一个字符串变量 id,用于存储要删除的学生学号。函数通过 printf 函数提示用户输入要删除的学生学号,并使用 scanf 函数从标准输入读取字符串。然后,函数打开名为 "students.dat" 的文件,以只读方式读取学生信息,并打开名为 "students.tmp" 的文件,以写入方式写入非删除的学生信息。函数使用一个 while 循环,逐行读取文件中的学生信息,并使用 sscanf 函数提取每行学生信息中的学号。如果该学生学号与要删除的学生学号相同,函数将标记删除并跳过该行信息;否则,函数将该行信息写入 "students.tmp" 文件中。循环结束后,函数关闭两个文件指针。
如果成功删除了一条学生记录,函数将删除原始的 "students.dat" 文件,并将 "students.tmp" 文件重命名为 "students.dat"。如果没有找到要删除的学生记录,函数将删除 "students.tmp" 文件并输出一条错误信息。MAX_NAME_LEN、MAX_CLASS_LEN 和 MAX_ID_LEN 都是预定义的常量,分别表示姓名、班级和学号字符串的最大长度。
阅读全文