同时写入两个结构体,分别为他们赋值。

问题遇到的现象和发生背景

写入两个结构体,为啥第二个结构体里第一个变量不让我写入。

用代码块功能插入代码,请勿粘贴截图

#include
#include
#define MAXNAME 21 /姓名的最大长度/
#define MAXGENDER 3 /性别的最大长度/
char * s_gets(char* st,int n);

struct student1 {
char NAME1[MAXNAME];
char GENDER1[MAXGENDER];
int number1;
};

struct student2 {
char NAME2[MAXNAME];
char GENDER2[MAXGENDER];
int number2;
};

int main(void)
{
struct student1 stu1;

printf("student1\nWhat is your name?\n");
s_gets(stu1.NAME1,MAXNAME);
printf("please enter your gender.\n");
s_gets(stu1.GENDER1,MAXGENDER);
printf("please enter your student id.\n");
scanf("%d",&stu1.number1);

struct student2 stu2;

printf("student2\nWhat is your name?\n");
s_gets(stu2.NAME2,MAXNAME);
printf("please enter your gender.\n");
s_gets(stu2.GENDER2,MAXGENDER);
printf("please enter your student id.\n");
scanf("%d",&stu2.number2);

printf("The first student`s information is:\n");
printf("NAME:%s     GENDER:%s     STUDENT ID:%d\n",
       stu1.NAME1,stu1.GENDER1,stu1.number1);
printf("The second student`s information is:\n");
printf("NAME:%s     GENDER:%s     STUDENT ID:%d\n",
       stu2.NAME2,stu2.GENDER2,stu2.number2);


return 0;

}

char *s_gets(char *st,int n)
{
char *str;
char *discover;

str=fgets(st,n,stdin);
if(str)
{
    discover = strchr(st,'\n');
    if(discover)
        *discover= '\0';
    else
        while (getchar() != '\n')
            continue;
}
return str;

}

运行结果及报错内容

输入第二个学生的名字时
s_gets(stu2.NAME2,MAXNAME);
这一行语句程序好像跳过了,不让我输入,不知道为啥。

因为gets会以回车作为读取结束标志,
你读取上一个结构体里最后一个变量时最后按了回车,下一个结构体第一个变量读取的时候把那个回车当做字符读取然后结束了
解决方法在他们之间用一个getchar()函数读取掉回车字符


/*******************************************************************************
  * @file          main.c
  * @verison       v1.0.0
  * @copyright     COPYRIGHT © 2020 CSG
  * @author        ShiYanKai
  * @date:         2021-06-09
  * @brief
  * @bug
  * - 2021-06-09  SYK Created
*******************************************************************************/

#include <stdio.h>


typedef struct {
    int a;
    int b;
} str_t;

int main()
{
    str_t str1;
    str_t str2;
    str1.a = 5;
    str1.b = 6;

    str2 = str1;
    printf("%d\n", str2.a);
    printf("%d\n", str2.b);
}