#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
之间看到空间你可以向我解释一下吗?
答案 0 :(得分:2)
答案 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
之前的空格可以占用任意数量的换行符。