2

当我使用带有 %d 或 %f 的 scanf 时,它会跳过空白字符。另一方面,当与 %c 一起使用时,它会读取空白字符。有人可以详细说明为什么会发生这种情况吗?

使用 %d 或 %f 就像下面的代码一样,它会自动跳过空白字符

#include<stdio.h>
void main(void)
{
int i;
scanf("%d ",&i);
}

如果我读这样的输入

#include<stdio.h>
void main(void)
{
char ch;
scanf(" %c ",&ch);
scanf(" %c",&ch);  /*or like this*/
}

它会跳过空白字符。为什么 scanf 使用格式说明符显示不同的行为????

4

1 回答 1

4

基本上,这是因为空格字符对%dor无效%f,所以他们会跳过它们。

但空白字符是有效字符,因此%c会尝试处理它。

C99 §7.19.6.2 fscanf 函数第 8 节

输入空白字符(由isspace函数指定)将被跳过,除非规范包含[, c, orn说明符。

于 2013-08-26T12:07:15.647 回答