scanf函数似乎在c中被跳过

Dez*_*ang 0 c

我是C语言的新手,我在下面尝试了此代码,但似乎scanf已被跳过,当我运行此代码时,它仅询问我输入姓名和年龄,并跳过了下面的行,仅在在“ if”语句上方的printf,有人可以帮忙吗?

#include<stdio.h>
void main()
{
    int age;
    char sex;
    char name[20];
    char status;
    printf("Enter your last name\n");
    scanf("%s", &name);

    printf("Enter your age\n");
    scanf("%d", &age);

    printf("Enter sex (M/F)\n");
    scanf("%c", &sex);


    printf("your status,married, single,irrelevant (M/S/I)\n");
    scanf("%c", &status);
    if(age>=16 && sex=='M')
        printf("hello, Mr %s\n", name);
    if(age<16 && sex =='M')
        printf("hello, Master %s\n", name);
    if(sex=='F' && status=='M')
        printf("hello, Mrs %s\n", name);
    if(sex=='F' &&(status=='S' ||status=='I'))
        printf("hello,miss %s\n", name);
}
Run Code Online (Sandbox Code Playgroud)

Aru*_*A S 6

更改

scanf("%c", &sex);
Run Code Online (Sandbox Code Playgroud)

scanf(" %c", &sex);
       ^
      space
Run Code Online (Sandbox Code Playgroud)

scanf("%c", &status);
Run Code Online (Sandbox Code Playgroud)

scanf(" %c", &status);
       ^
      space
Run Code Online (Sandbox Code Playgroud)

问题是由于您第二次致电时,尾随换行符scanf()。由于它是%d类型说明符,因此当您按EnterA 时'\n',流中将保留换行符(),下一个将scanf()尝试读取该换行符,因此,似乎好像只是跳过了输入,但实际上,它读取了换行符字符。

因此,换行符存储在变量中sex,因此,它会跳过询问您该变量的输入的过程。