用户在C中扫描字符的基础知识

时间:2013-03-28 10:48:34

标签: c

嗨,这个问题可能看起来有点愚蠢,但我面临着一些严重缺乏基本面的问题,我无法弄明白。这是一个非常简单的扫描四个字符的代码,但它无法正常工作。这是一个较大程序的摘录,但这是我遇到问题的地方。谁能指出犯错的地方?

#include<stdio.h>
#include<stdlib.h>
{

    char a, b, c, d;
    printf("Enter the value of a\n");
    scanf("%c", &a);
    if(a == 'Y')
    {

        printf("Enter if this question is stupid or no Y/N\n");
        scanf("%c", &b);

    }
    else
    {

        printf("This is such a big waste of time");

    }

    printf("Enter the value of c\n");
    scanf("%c", &c);

    if(c == 'Y')
    {

        printf("Enter if I am stupid or no? Y/N\n");
        scanf("%c", &d);

    }
    else
    {

        printf("I will go mad soon\n");

    }

}

3 个答案:

答案 0 :(得分:2)

我认为由于换行符可能会出现问题。尝试使用

 scanf(" %c", &var)

注意:我原来的回答是错误的但是被接受了,我从@teppic复制了这个解决方案。

答案 1 :(得分:2)

%c说明符告诉scanf仅读取一个字符。当您键入一个字符并按Enter键时,您将提供两个字符。所以下一个电话已经有了一个要阅读的角色。

为了使这项工作正常,您需要在阅读字符之前跳过任何空格。像这样更改每个电话:

scanf(" %c", &a)

现在您输入的所有上一个换行都将被跳过。

答案 2 :(得分:-1)

扫描角色后,您没有冲洗缓冲区,当您输入一个字符并按ENTER键然后在下一次扫描中,您的ENTER被视为一个字符,这就是它跳过第二次扫描的原因。在每次扫描后使用这些__fpurge(stdin),fpurge(stdin)中的任何一个,无论你的系统是什么。它会工作。