所以我有这个代码,出于某种原因,当我试图输入所有“请求”的信息时,我的程序总是跳过扫描char
目前我通过创建一个char类型变量来解决它,在1位置上有一个数组并将其视为一个字符串,但是为什么它不会读取一个字符串是没有意义的
struct person
{
char name[30];
int age;
char sex;
};
int main()
{
struct person data[3];
for (i = 0 ; i < 3 ; i++)
{
printf("\nType in the data of the person number: %d",i+1);
printf("\nName: ");
scanf("%s",data[i].name);
printf("\nAge: ");
scanf("%d",&data[i].age);
printf("\nSex (M/F): ");
scanf("%c",data[i].sex);
}
}
它完美地扫描姓名和年龄,甚至打印它们,但由于某种原因,它拒绝扫描性别
char
被读取,但它是从前一个'\n'
留下的换行符scanf()
。跳过领先的空白使用
scanf(" %c", &data[i].sex);
// |
// +---- skips leading whitespace
而且你也错过了代码中的address-of运算符。
大多数格式说明符(如%d
)不需要前导空格,因为它们默认跳过前导空格。
输入流中有一个换行符,它被读作您尝试读作性别的字符(%c
)。
您可以通过以下方式阅读此字符并忽略它:
printf("\nSex (M/F): ");
getchar(); //ignore the remained character in input stream
scanf("%c", &data[i].sex);
如其他答案中所述,您还在扫描性别时忘记了参考符号(&
)。