// 删除学生信息 void delete_student_info() { char id[10]; printf("请输入要删除的学生学号:"); scanf("%s", id); int i; for (i = 0; i < student_count; i++) { if (strcmp(student_list[i].id, id) == 0) { // 将数组中的元素依次向前移动 int j; for (j = i; j < student_count - 1; j++) { student_list[j] = student_list[j + 1]; } student_count--; printf("学生信息删除成功!\n"); return; } } printf("未找到该学生信息!\n"); }的代码解析
时间: 2024-02-14 15:19:27 浏览: 19
这段代码是一个函数,用于删除学生信息。它首先提示用户输入要删除的学生学号,然后通过循环遍历 `student_list` 数组,查找与输入的学号相匹配的学生信息。
在循环中,使用 `strcmp()` 函数比较 `student_list[i]` 中的学号和用户输入的学号是否相等,如果相等,则将数组中的元素依次向前移动一位,覆盖当前元素,然后将 `student_count` 变量减一,表示删除了一个学生信息。最后输出删除成功的提示信息,并通过 `return` 语句结束函数。
如果循环结束后仍未找到匹配的学生信息,则输出提示信息。
总体来说,这段代码实现了删除学生信息的功能,可以在程序中调用该函数来删除指定学生的信息。
相关问题
void delete student info0 { char id[10]; printf("请输入要删除的学生学号: ");scanf("%s" id); int i; for (i= 0;i < student count; i++) {if (strcmp(student list[j].id, id) == 0){ 福/ 将数组中的元素依次向前移动int j; for(=讨< student count - 1; j++) { student list[] = student list[j t1 student count- printf(学生信息删除成功! \n);return; print("未找到该学生信息! \n):
这段代码存在一些错误,可能会导致程序运行出现问题。以下是我发现的几个问题:
1. 函数名应该是“void delete_student_info()”,没有空格,单词之间使用下划线分隔。
2. 在输入学生学号的时候,scanf函数缺少逗号,应该是“scanf("%s", id);”。
3. 在第5行的for循环中,循环变量应该是i而不是j,应该是“for (i = 0; i < student_count; i++)”。
4. 在第6行的if语句中,应该是“strcmp(student_list[i].id, id)”而不是“strcmp(student_list[j].id, id)”。
5. 在第8行的for循环中,循环变量应该是j而不是i,应该是“for (j = i; j < student_count - 1; j++)”。
6. 在第9行中,应该是“student_list[j] = student_list[j + 1];”而不是“student_list[] = student_list[j + 1];”。
7. 在第10行中,应该是“student_count--”而不是“student_count-”。
8. 在第11行中,应该是“printf("学生信息删除成功! \n");”而不是“printf(学生信息删除成功! \n);”。
9. 在第12行中,应该是“return;”而不是“print("未找到该学生信息! \n);”。同时,应该在if语句之外添加一个“printf("未找到该学生信息! \n");”的语句,用于提示用户未找到该学生信息。
修改后的代码如下:
void delete_student_info() {
char id[10];
printf("请输入要删除的学生学号: ");
scanf("%s", id);
int i;
for (i = 0; i < student_count; i++) {
if (strcmp(student_list[i].id, id) == 0) {
for (int j = i; j < student_count - 1; j++) {
student_list[j] = student_list[j + 1];
}
student_count--;
printf("学生信息删除成功! \n");
return;
}
}
printf("未找到该学生信息! \n");
}
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"); } }
这段代码定义了一个名为 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 都是预定义的常量,分别表示姓名、班级和学号字符串的最大长度。