C语言源代码如下。运行时直接跳过一些语句。原因是什么?求详细解释,

那是因为你读错了一个字。

Pure scanf("%c ")或getchar()将读取您上次输入的回车符(\n)。

然后你读一个回车。

正确的做法是读入一个字符串,然后先取字符串。

代码:

//老师?学生?信息一起?并打印出来。

# include & ltstdio.h & gt

工会?情况

{

int?得分[4];//学生4科成绩

夏尔?情况[40];//教师的工作情况

};

struct?个人的

{

int?num//数字

夏尔?名称[10];//名称

夏尔?性;//性别

夏尔?善良;//过滤?t?还是?s

工会?条件?改变;

};

struct?私人的?信息[2];//创建两个个人信息表

作废?主()

{

int?我,?j;

为了什么?(我?=?0;?我?& lt?2;?i++)

{

printf("拜托?输入?num:");//数字

scanf("%d ",& amp信息[i]。num);

夏尔?性[16];

printf("Enter?那个?m?还是?那个?w:“);//性别?

scanf("%s ",性);

信息[i]。性?=?性[0];

printf("Enter?那个?姓名:“);?//名称

scanf("%s ",信息[i]。姓名);

夏尔?ts[16];

printf("拜托?改变?t?还是?s:“);?//?t?还是?s

scanf("%s ",ts);

信息[i]。善良?=?ts[0];

如果?(' t '?==?信息[i]。善良)//?t?为教师工作

{

printf("拜托?进入?那个?情况?:");

scanf("%s ",信息[I]. change . situation);

}

不然呢?//?s是?学生的成绩

{

为了什么?(j?=?0;?j?& lt?4;?j++)

{

printf("拜托?进入?没有%d?分数:“,?j);

scanf("%d ",& ampinformation[I]. change . score[j]);

}

}

}

为了什么?(我?=?0;?我?& lt?2;?i++)?//打印以下内容

{

printf("%d\n ",信息[i]。num);//数字

printf("%s\n ",信息[i]。姓名);//名称

printf("%c\n ",信息[i]。性);//性别

如果?(' t '?==?信息[i]。善良)

{

printf("%s ",信息[I]. change . situation);//工作情况

}

其他

{

为了什么?(j?=?0;?j?& lt?4;?j++)

{

printf("%d ",information[I]. change . score[j]);//结果

}

}

}

}运行: