所以我有这段代码,出于某种原因,当我尝试输入所有“请求的”信息时,我的程序总是跳过扫描字符
目前我通过在 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/