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