c - 读取结构内部的字符时有什么问题吗?

标签 c struct char scanf

所以我有这段代码,出于某种原因,当我尝试输入所有“请求的”信息时,我的程序总是跳过扫描字符

目前我通过在 1 个位置创建一个带有数组的 char 类型变量并将其视为字符串来解决它,但是它为什么不读取 char 没有意义

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 被读取,但它是前一个 scanf() 留下的换行符 '\n'。跳过前导空格使用

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

而且您还错过了代码中的地址运算符。

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

关于c - 读取结构内部的字符时有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55860858/

相关文章:

c++ - LLVM 有后端优化器吗?

在 C 中分配二维堆数组时出现一致的段错误

sorting - 按指定字段对结构 slice 进行排序

go - 将嵌套结构保存到 gob

c - 搜索并打印输入文件中所有不重复的结构名称

c - C语言程序输出中的指针

c - 在 C 中执行 Octave 程序

c++ - 如何在C++中获取元素类型?

Java从char数组中删除重复项的方法

c - 下面两个c语句是否相同?