scanf函数的不同行为与不同的格式说明符

时间:2013-08-26 12:00:39

标签: c scanf format-specifiers

当我使用带有%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用格式说明符显示不同的行为????

1 个答案:

答案 0 :(得分:4)

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

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

  

C99§7.19.6.2 fscanf功能第8节

     

除非是跳过输入的空白​​字符(由isspace函数指定)   该规范包括[cn说明符。