2012-06-19 125 views
3

我通常會收到一個字符%c,但我看過使用%*c%c的代碼。例如:作爲scanf的格式說明符,%* c%c和%c之間有什麼區別?

char a; 
scanf("%*c%c", &a); 

有什麼區別?

+1

每個說明符都在任何正派的書中描述。發佈前你有沒有考慮過? – dirkgently

+2

是的,我試圖找到,但我發現其他情況。我的書Explay這些字符\t%C short,int和長\t%d short,int和長\t%我 無符號短,無符號整型,無符號長\t%U 上浮\t%F 雙\t%LF 浮動,雙(科學記數法)\t%和 浮動,雙[使用中的最短%F%E] \t%克 短,整型,長(八進制格式)\t%或 短,整型,長(十六進制) \t%×%(重量) 指針\t字符序列由 '\ 0' 終止\t%S 無符號長長[64比特] \t%LLU 長長[64比特] \t%LL 長雙[64比特] \t%的Lf 無符號短[8-比特] \t%胡你能解釋我的區別?請 – ild0tt0re

回答

5

scanf格式字符串,則%之後,*字符是分配抑制字符

在你的例子中,它吃掉了第一個字符但不存儲它。

例如,使用:

char a; 
scanf("%c", &a); 

如果輸入:xyz\n,(\n是換行字符),那麼x將被存儲在對象a

有了:

scanf("%*c%c", &a); 

如果輸入:xyz\ny將被存儲在對象a

Ç說指定爲*scanf這種方式:

(C99,7.19.6.2p10)除非分配抑制是由*指示的,轉換的結果被放置在對象指向格式參數之後的第一個參數尚未收到轉換結果。

5

根據Wikipedia

可選星號(*)之後的百分比符號表示 通過此格式說明讀出的數據將不被存儲在 變量。對於 這個丟棄的變量,格式字符串後面不應包含任何參數。

這樣您就可以跳過與該星號相匹配的字符。

相關問題