1

嗨,这个问题可能看起来有点愚蠢,但我在这里面临着一些我无法弄清楚的严重缺乏基本面的问题。这是一个非常简单的扫描四个字符的代码,但它不能正常工作。这是一个更大程序的摘录,但这是我面临的问题。谁能指出错误在哪里?

#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");

    }

}
4

3 回答 3

2

我认为由于换行符,您可能会遇到问题。尝试使用

 scanf(" %c", &var)

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

于 2013-03-28T10:51:32.400 回答
2

说明%c符告诉scanf只读取一个字符。当您键入一个字符并按 Enter 键时,您将提供两个字符。所以下一个调用已经有一个字符要读取。

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

scanf(" %c", &a)

现在您输入的任何先前的换行符都将被跳过。

于 2013-03-28T11:27:54.677 回答
-1

扫描字符后,您没有刷新缓冲区,当您输入一个字符并按 ENTER 时,在下一次扫描中您的 ENTER 被视为一个字符,这就是它跳过第二次扫描的原因。在每次扫描后使用这些 __fpurge(stdin)、fpurge(stdin) 中的任何一个,无论您的系统是否有效。它会起作用的。

于 2013-03-28T11:11:13.667 回答