在下面的代码中当我想要输入第二个学生或> 2个学生的记录时..编译器跳过姓名输入并输入课程和年龄的输入..有什么问题请帮帮我?
#include <stdio.h>
#include <conio.h>
struct Student
{
char Name[16];
char Class[16];
int age ;
};
void main()
{
struct Student a[5] ;
for(int i=0 ; i<5 ; i++)
{
printf("\n Enter Name :");
gets(a[i].Name);
printf("\n Enter Class :");
gets(a[i].Class);
printf("\n Enter Age : ");
scanf("%d" , & a[i].age);
}
getch();
}
答案 0 :(得分:3)
问题很常见。试试这个:
scanf("%d ", &a[i].age);
^ <--- This space will make scanf eat the remaining blanks
有关于此的C常见问题解答:
次要说明:
gets
即可。请改用fgets
。答案 1 :(得分:3)
首先,永远不要使用gets
。没有办法告诉它你的缓冲区有多大,所以它会愉快地写入输入结束并使程序爆炸。这曾经是网络服务器中可远程利用安全漏洞的首要原因。
其次,从不使用任何*scanf
函数,因为:
答案 2 :(得分:1)
这是scanf
。当您按下ENTER
之后,换行符将完成对gets
的下一次调用。
要解决此问题,您可以在循环结束时在getchar
之后添加scanf
,这将占用换行符。
for(int i=0 ; i<5 ; i++)
{
printf("\n Enter Name :");
gets(a[i].Name);
printf("\n Enter Class :");
gets(a[i].Class);
printf("\n Enter Age : ");
scanf("%d" , & a[i].age);
getchar();
}