读取结构中的字符时是否有任何问题?

问题描述 投票:0回答:2

所以我有这个代码,出于某种原因,当我试图输入所有“请求”的信息时,我的程序总是跳过扫描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);
    }
}

它完美地扫描姓名和年龄,甚至打印它们,但由于某种原因,它拒绝扫描性别

c struct char scanf
2个回答
2
投票

char被读取,但它是从前一个'\n'留下的换行符scanf()。跳过领先的空白使用

scanf(" %c", &data[i].sex);
//     |
//     +---- skips leading whitespace

而且你也错过了代码中的address-of运算符。

大多数格式说明符(如%d)不需要前导空格,因为它们默认跳过前导空格。


0
投票

输入流中有一个换行符,它被读作您尝试读作性别的字符(%c)。

您可以通过以下方式阅读此字符并忽略它:

        printf("\nSex (M/F): ");
        getchar();  //ignore the remained character in input stream
        scanf("%c", &data[i].sex);

如其他答案中所述,您还在扫描性别时忘记了参考符号(&)。

© www.soinside.com 2019 - 2024. All rights reserved.