2013-08-26 46 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說明符。