scanf的问题

时间:2013-11-22 07:30:36

标签: c scanf

#include <stdio.h>

int main()
{

    char C, B;
    int x;



    printf("What comes after G\n");
    scanf("%c", &C);

    printf("What comes after O\n");
    scanf("%c", &B);

    printf("What is your age?\n");
    scanf("%d", &x);

    printf("You said %c comes after G, %c after T and you're %d years old? Right?", C, B, x);

    return 0;
}

问题是每当您运行代码时它会跳过第二个问题“O之后发生什么”,然后询问“你的年龄是多少?”

我能避免程序跳过第二个问题的唯一方法是在代码中添加一个空格

printf("What comes after O\n");
    scanf(" %c", &B);

您可以在%c

之间看到空间

你可以向我解释一下吗?

4 个答案:

答案 0 :(得分:2)

根据手册页http://linux.die.net/man/3/scanf

,您需要占用空白区域(即换行)

答案 1 :(得分:1)

问题是你使用scanf获取字符..并且在用户的每个输入的末尾添加一个新行。所以第二次只有新行存储在'B'中因为你给出的第一个输入..

而不是scanf,将其更改为getchar - 您的问题应该得到解决

答案 2 :(得分:0)

您可以使用scanf来吃单个字符,而不会将其分配给此类::

scanf( "%[^\n]%*c", &C ) ;

%[^\n]告诉scanf读取每个不是'\n'的字符。这会在输入缓冲区中留下'\n'字符,然后* (assignment suppression)将使用单个字符('\n'),但不会将其分配给任何内容。

答案 3 :(得分:0)

在按 Enter 之后,此问题的原因是前一个\n的新行字符scanf。此\n留待scanf的下一次调用 要避免此问题,您需要在%c中的scanf说明符之前放置一个空格。

scanf(" %c", &C);  
...
scanf(" %c", &B);
...
scanf(" %c", &X);  

%c之前的空格可以占用任意数量的换行符。