C语言:这是在我输入之前存入数据了吗?

 求大神帮忙看一下,我输入在输入sex和job之前,都会先跳过一次输入,然后显示输入错误。。。。

#include <stdio.h>
int main()
{
	struct 
	{
		int num;
		char name[10];
		char sex;
		char job;
		union
		{
			int banji;
			char position[10];
		}category;
	}person[2];
	int i;
	for (i = 0; i < 2; i++)
	{
		printf("Please input num:");
		scanf_s("%d", &person[i].num);
		printf("Please input name:");
		scanf_s("%s", person[i].name,10);
		printf("Please select sex:");
		scanf_s("%c", &person[i].sex);
        while ((person[i].sex != 'f') && (person[i].sex != 'm'))
		{
			printf("Sex input error!\n");
			printf("Please select sex again:");
			scanf_s("%c", &person[i].sex);
		}
		printf("Please select job:");
		scanf_s("%c", &person[i].job);
		while ((person[i].job != 's') && (person[i].job != 't'))
		{
			printf("Job input error!\n");
			printf("Please select job again:");
			scanf_s("%c", &person[i].job);
		}
		if (person[i].job == 's')
		{
			printf("Please input class:");
			scanf_s("%d", &person[i].category.banji);
		}
		else if (person[i].job == 't')
		{
			printf("Please input position:");
			scanf_s("%s", person[i].category.position,10);
		}
		printf("\n\n");
	}
	printf("number  name    sex     job     class/position\n");
	for (i = 0; i < 2; i++)
	{
		if (person[i].job == 's')
		{
			printf("%-8d%-8s%-8c%-8c%-8d\n", person[i].num, person[i].name, person[i].sex, person[i].job, person[i].category.banji);
		}
		if (person[i].job == 't')
		{
			printf("%-8d%-8s%-8c%-8c%-8s\n", person[i].num, person[i].name, person[i].sex, person[i].job, person[i].category.position);
		}
	}
}

 

由输入缓冲区引起的。每次输入前清空一下输入缓冲区即可!

#include <stdio.h>
int main() {
	struct {
		int num;
		char name[10];
		char sex;
		char job;
		union {
			int banji;
			char position[10];
		}category;
	}person[2];
	char c;
	int i;
	for (i = 0; i < 2; i++) {
		printf("Please input num:");
		scanf_s("%d", &person[i].num);
		while ((c = getchar()) != '\n');    // 清空输入缓冲区

		printf("Please input name:");
		scanf_s("%s", person[i].name, 10);
		while ((c = getchar()) != '\n');

		printf("Please select sex:");
		scanf_s("%c", &person[i].sex);
		while ((c = getchar()) != '\n');

		while ((person[i].sex != 'f') && (person[i].sex != 'm')) {
			printf("Sex input error!\n");
			printf("Please select sex again:");
			scanf_s("%c", &person[i].sex);
		}
		//while ((c = getchar()) != '\n');

		printf("Please select job:");
		scanf_s("%c", &person[i].job);
		while ((c = getchar()) != '\n');

		while ((person[i].job != 's') && (person[i].job != 't')) {
			printf("Job input error!\n");
			printf("Please select job again:");
			scanf_s("%c", &person[i].job);
		}
		//while ((c = getchar()) != '\n');

		if (person[i].job == 's') {
			printf("Please input class:");
			scanf_s("%d", &person[i].category.banji);
		} else if (person[i].job == 't') {
			printf("Please input position:");
			scanf_s("%s", person[i].category.position, 10);
		}
		printf("\n\n");
	}
	printf("number  name    sex     job     class/position\n");
	for (i = 0; i < 2; i++) {
		if (person[i].job == 's') {
			printf("%-8d%-8s%-8c%-8c%-8d\n", person[i].num, person[i].name, person[i].sex, person[i].job, person[i].category.banji);
		}
		if (person[i].job == 't') {
			printf("%-8d%-8s%-8c%-8c%-8s\n", person[i].num, person[i].name, person[i].sex, person[i].job, person[i].category.position);
		}
	}
}

十分感谢!!!