似乎跳过了scanf(&q;%c&q;)调用 [英] scanf("%c") call seems to be skipped

查看:21
本文介绍了似乎跳过了scanf(&q;%c&q;)调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试了下面的代码,但似乎跳过了scanf("%c")。它只要求我输入姓名和年龄,并跳过下面的行。它只打印if语句上方的printf中的文本。有人能帮忙吗?

#include<stdio.h>

int main()
{
    int age;
    char sex;
    char name[20];
    char status;
    printf("Enter your last name
");
    scanf("%s", &name);

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

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

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

推荐答案

更改

scanf("%c", &sex);

scanf(" %c", &sex);
       ^
      space

scanf("%c", &status);

scanf(" %c", &status);
       ^
      space

问题是由于您第二次调用scanf()后尾随换行符。因为它是%d类型说明符,所以当您按%dEnter键时,流中会留下一个换行符(' '),下一个scanf()会尝试读取换行符,因此,看起来好像刚刚跳过了输入,但实际上它读取了换行符。

因此,换行符存储在变量sex中,因此,它跳过要求您输入该变量。

这篇关于似乎跳过了scanf(&q;%c&q;)调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆