C 为什么每次读取字符都需要跳过字符

C 为什么每次读取字符都需要跳过字符,c,C,在上面的代码中,为什么我必须在读取另一个字符之前包含跳过字符?因为当您在输入第一个字符后键入enter时,新行字符\n会卡在缓冲区中。因此您需要包含此跳过字符,或者可以在每次scanf()之后使用agetchar()不带参数的函数。格式字符串中的空格字符“消耗”输入中任意数量的空白字符,包括换行符-在输入后按enter键时,这是不可避免的。因为您决定使用包含应跳过的换行符的输入?不清楚您所说的问题是什么意思。什么是“跳过字符”,你在哪里“包括”它?为什么?略带讽刺的回答:因为scanf太差劲了。

在上面的代码中,为什么我必须在读取另一个字符之前包含跳过字符?

因为当您在输入第一个字符后键入enter时,新行字符
\n
会卡在缓冲区中。因此您需要包含此跳过字符,或者可以在每次
scanf()之后使用
a
getchar()
不带参数的函数。

格式字符串中的空格字符“消耗”输入中任意数量的空白字符,包括换行符-在输入后按enter键时,这是不可避免的。因为您决定使用包含应跳过的换行符的输入?不清楚您所说的问题是什么意思。什么是“跳过字符”,你在哪里“包括”它?为什么?略带讽刺的回答:因为
scanf
太差劲了。如果必须使用
scanf
,请遵循以下规则:(1)仅使用
%d
%f
%s
,切勿使用
%c
(或
%[…]
)。(2) 切勿将对
scanf
的调用与对
fgets
(或
gets
)的调用混合在一起。(3) 不要试图通过一个
scanf
调用读取多个值(也就是说,每个格式语句只能读取一个
%
)。(4) 始终检查返回值是否为1。(5) 请记住使用
&
,除非使用
%s
。(6) 如果你想做一些更复杂的事情,而这些事情是在这些规则下做不到的,那么是时候放弃scanf,使用更好的东西了。严肃的回答:你几乎总是想在
%c
之前使用空格,因为几乎总是有一些空白需要跳过——可能是用户输入的前一个响应中留下的换行符。这就是为什么其他格式说明符(
%d
%f
,等等)总是跳过前导空格的原因,也是为什么它如此混乱以至于默认情况下
%c
不会这样做的原因。
scanf("%c",&a);

printf("enter a character NUMBER\n");

scanf(" %c",&b);

printf("enter a character NUMBER\n");

scanf(" %c",&c);