为什么void delet() { printf("\n请输入学生的学号:"); int p,o; char m; scanf("%d",&p); 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"); scanf("%c",&m); switch(m) { case 1: student[p].no=-1; printf("\n返回菜单\n"); case 2: printf("\n返回菜单\n"); }在显示是否删除后跳过了之后的内容
时间: 2024-04-05 11:33:01 浏览: 120
学号成绩的输入删除插入修改操作类似Dos
这段代码存在一些问题。首先,在输入学生学号后,代码中的循环会将输入的学号覆盖为0,这会导致后面的查找出现问题。其次,在判断学号是否相同时,代码中的o变量没有初始化,也就是说会出现未定义行为。最后,在输入是否删除时,应该使用字符变量而不是整型变量。
关于为什么在显示是否删除后跳过了之后的内容,是因为在输入是否删除时,代码中使用了"%c"格式符读取字符,但是在输入该字符前,输入缓冲区中可能会存在换行符等字符,这些字符会被直接读取到字符变量中,导致后面的内容被跳过。可以在输入字符前使用一个getchar()函数来清空输入缓冲区,或者改用"%d"格式符读取整型变量,然后将输入的整型值转换为字符。
阅读全文