2013-08-26 47 views
2

当我用%d或%f使用scanf时,它跳过空格字符。另一方面,当与%c一起使用时,它会读取空白字符。有人详细说明了为什么会发生这种情况?不同格式说明符的scanf函数的不同行为

用%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

我不认为[这会帮助](http://en.cppreference.com/w/c/io/fscanf)。格式说明符及其修饰符的描述非常详细。 – WhozCraig

+4

“为什么会发生这种情况?” - 因为'%c'寻找*任何*字符。 – 2013-08-26 12:06:48

+0

是的,如果'%c'总是跳过它们,会如何找到一个空格字符?你的任何输入都不会有空间。 –

回答

4

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

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

C99§7.19.6.2fscanf函数部8

输入的空白​​字符(由isspace函数指定)被跳过,除非 说明书包括[c,或n说明符。