2016-03-21 128 views
1

我一直在想,爲什麼printf("%.d", 0);什麼都不輸出,而它輸出任何其他數字比0,printf("%d", 0);輸出'0'如預期。printf 0與0精度

2個代碼之間的唯一區別是精度。以下是關於精度的文檔說明:

可選精度,以句點形式表示。隨後是一個 可選數字字符串。如果數字串被省略,則精度爲 被視爲零。這給出了的最小數字數字出現 d,i,o,u,x和X轉換。

在這種情況下,精度應該被忽略,否?

+2

您可能想要閱讀其他一些文檔,例如[this one](http://en.cppreference.com/w/c/io/fprintf)(通常非常準確),其中說「如果兩個轉換後的值和精度爲0,則轉換結果不包含任何字符。「 –

回答

4

從文檔(重點煤礦):

對於整數說明符(d,I,O,U,X,X):精度指定要被寫入的最小位數。如果要寫入的值小於此數字,則結果將用前導零填充。即使結果更長,值也不會被截斷。 0精度意味着沒有字符的值寫入0

不知道爲什麼,雖然,可能有與C的方式做處理NULL指針,或作爲@TripeHound指出的那樣,可能是一個設計決定。

+0

好的,那麼我也許應該停止在我的電腦上使用這個人;) – realUser404

+0

你的電腦上的那個人是指基本的printf函數,而不是c包裝。我猜測0和NULL之間有衝突;如果你有時間'info coreutils'printf invocation''給你完整的手冊頁。 –

+0

我的猜測是,它與NULL無關,只是爲了讓您可以選擇將零值作爲空白(如電子表格傾向於允許的)。 – TripeHound