使用 gets() 获取结构中的输入时出错

udi*_*043 2 c arrays structure gets

我正在制作一个程序来接受教师结构中的输入,但存在未知的运行时错误,这是代码 -

#include <stdio.h>
#include <conio.h>

struct Teacher
{
 char Name[30];
 char Qualifications[20];
 int experience_year;
}th[10];

void teacher()
{    
 int t,i;
 printf("Enter how many teachers are in department\n");
 scanf("%d",&t);
 for(i=1;i<=t;i++)
 {       
   printf("Enter name of teacher : ");
   gets(th[i].Name);
   printf("Enter qualification of teacher : ");
   gets(th[i].Qualifications);
   printf("Enter experience_year of teacher : ");
   scanf("%d",&th[i].experience_year);
 }
 for(i=1;i<=t;i++)
 {
   printf("Details of %d teacher\n",i);
   printf(th[i].Name);
   printf(" ");
   printf(th[i].Qualifications);
   printf(" ");
   printf("%d",th[i].experience_year);
   printf("\n");
 }
}   
int main()
 {
   teacher();
   return 0;
 }
Run Code Online (Sandbox Code Playgroud)

输出是 -

Enter number of teacher
1
Enter teachers name : Enter qualification of teacher :
Run Code Online (Sandbox Code Playgroud)

如何获取老师的姓名(输入)..错误是什么?

Ayu*_*Jha 5

用这个:

getchar();
Run Code Online (Sandbox Code Playgroud)

 gets(th[i].Name);
Run Code Online (Sandbox Code Playgroud)

消耗前导空格和换行符,这些空格和换行符由于之前的语句而留在缓冲区中。

另外,我会推荐fgets,这比gets以下更安全:

fgets(th[i].Name,30,stdin);
Run Code Online (Sandbox Code Playgroud)

fgets(th[i].Qualifications,20,stdin);
Run Code Online (Sandbox Code Playgroud)

为什么获取是危险的