void insert() /*插入函数*/
{
int i = n, j, flag;
printf("请输入待增加的学生数:\n");
scanf("%d", &m);
if (m > 0) {
do
{
flag = 1;
while (flag)
{
flag = 0;
printf("请输入第%d位学生的学号:\n", i + 1);
scanf("%s", stu[i].StudentId);
for (j = 0; j < i; j++) {
if (strcmp(stu[i].StudentId, stu[j].StudentId) == 0) {
printf("该学号已存在,请重新输入!\n");
flag = 1;
break;
}
}
}
printf("请输入第%d 个学生的姓名:\n", i + 1);
scanf("%s", stu[i].StudentName);
printf("请输入第%d 个学生的年龄:\n", i + 1);
scanf("%d", &stu[i].StudentAge);
printf("请输入第%d 个学生的性别:\n", i + 1);
scanf(" %c", &stu[i].StudentSex);
printf("请输入第%d 个学生的C语言成绩:\n", i + 1);
scanf("%f", &stu[i].score[0]);
printf("请输入第%d 个学生的高等数学成绩:\n", i + 1);
scanf("%f", &stu[i].score[1]);
printf("请输入第%d 个学生的大学英语成绩:\n", i + 1);
scanf("%f", &stu[i].score[2]);
if (0 == flag) {
i++;
}
} while (i<n + m);
}
n += m;
printf("学生信息增加完毕!!!\n");
system("pause");
}
为啥运行时,添加学生信息时姓名输入后会直接跳过成绩的输入显示添加信息成功,上面是代码
参考GPT和自己的思路:
根据你提供的代码,可能是因为输入姓名时,输入的姓名中包含空格或其他特殊字符导致输入流没有被完全清空。这会影响到后续输入流的读取,导致直接跳过成绩输入的问题。
解决方法是可以在输入姓名之后,加入一个getchar()函数来清空输入流,避免影响到后续读取。具体代码修改如下:
...
printf("请输入第%d 个学生的姓名:\n", i + 1);
scanf("%s", stu[i].StudentName);
getchar(); // 加入此行代码
printf("请输入第%d 个学生的年龄:\n", i + 1);
...
这样就可以避免姓名输入后直接跳过成绩输入的问题了。