为什么void delet() { printf("\n请输入学生的学号:"); int p,o; char m; scanf("%d",&o); for(p=0;p<STUDENT_NUM;p++) { if(o==student[p].no) { printf("\n学号 姓名 年龄 性别 班级 宿舍 电话号码\n"); printf("%-4d%-4s%-4d%-3s%-4d%-5s%s",student[p].no,student[p].name,student[p].age,student[p].sex,student[p].c1ass,student[p].address,student[p].phone); break; } } printf("\n是否删除\n1.是 2.否\n"); getchar(); scanf("%c",&m); switch(m) { case 1: student[p].no=-1; printf("\n返回菜单\n"); break; case 2: printf("\n返回菜单\n"); break; } }没能删除数据,可以给出修改后的代码吗?
时间: 2024-03-19 17:44:41 浏览: 56
学号成绩的输入删除插入修改操作类似Dos
好的,基于你提供的代码,我来给你修改一下:
```c
void delet() {
printf("\n请输入学生的学号:");
int p, o;
char m;
scanf("%d", &o);
for (p = 0; p < STUDENT_NUM; p++) {
if (o == student[p].no) {
printf("\n学号 姓名 年龄 性别 班级 宿舍 电话号码\n");
printf("%-4d%-4s%-4d%-3s%-4d%-5s%s", student[p].no, student[p].name, student[p].age, student[p].sex, student[p].c1ass, student[p].address, student[p].phone);
break;
}
}
printf("\n是否删除\n1.是 2.否\n");
getchar();
scanf("%c", &m);
switch (m) {
case '1':
// 将该学生后面的元素向前移动一位,实现删除操作
for (int i = p; i < STUDENT_NUM - 1; i++) {
student[i] = student[i+1];
}
student[STUDENT_NUM - 1].no = -1; // 最后一个元素置为-1
printf("\n删除成功!\n");
break;
case '2':
printf("\n返回菜单\n");
break;
default:
printf("\n无效的输入,请重新输入\n");
break;
}
}
```
在这个版本的代码中,我增加了一个 for 循环,将要删除的学生后面的元素全部向前移动一位,实现了删除操作。同时,将最后一个元素的学号置为 -1,以保证查询学生信息时不会再找到已经删除的学生。
阅读全文