C语言中用户字符扫描的基本原理

  • 本文关键字:扫描 语言 用户 字符
  • 更新时间 :
  • 英文 :


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

#include<stdio.h>
#include<stdlib.h>
{
    char a, b, c, d;
    printf("Enter the value of an");
    scanf("%c", &a);
    if(a == 'Y')
    {
        printf("Enter if this question is stupid or no Y/Nn");
        scanf("%c", &b);
    }
    else
    {
        printf("This is such a big waste of time");
    }
    printf("Enter the value of cn");
    scanf("%c", &c);
    if(c == 'Y')
    {
        printf("Enter if I am stupid or no? Y/Nn");
        scanf("%c", &d);
    }
    else
    {
        printf("I will go mad soonn");
    }
}

我认为你可能因为换行字符而有问题。尝试使用

 scanf(" %c", &var)

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

%c指示符告诉scanf只读取一个字符。当您键入一个字符并按enter键时,您提供了两个字符。因此,下一个调用已经有一个字符要读取。

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

scanf(" %c", &a)

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

您在扫描字符后没有刷新缓冲区,当您输入字符并按enter键时,在下一次扫描中您的enter被视为字符,这就是为什么它跳过第二次扫描。每次扫描后使用这些__fpurge(stdin), fpurge(stdin)中的任何一个,无论在您的系统上如何工作。它会成功的。

最新更新