2012-11-16 66 views
65

我知道這聽起來並不高效,但我正在尋找一種方法來記住所有printf調用的格式代碼。 %s,%p,%f都很明顯,但我不明白%d來自哪裏。 %i已被別的東西佔用了嗎?爲什麼%d代表整數?

+18

我最好的猜測是十進制 –

+0

是的,但是,這是一種諷刺+1,有趣的問題。 – Daniel

+0

雖然這不是一個真正的編程問題,我傾向於關閉這些:) –

回答

83

它代表「decimal」(基數10),而不是「整數」。您可以使用%xhexadecimal(基數16)和%o中打印以打印octal(基數8)。一個整數可以在任何這些基數中。

printf(),你可以使用%i的代名詞%d,如果你喜歡,而不是表示「整數」,「小數」,但%d一般是優選的,因爲它是更具體。

在輸入時,使用scanf(),您也可以同時使用%i%d%i表示將其解析爲任意基數(八進制,十六進制或十進制,如00x前綴所示)中的整數,而%d表示將其解析爲十進制整數。

這裏的所有的人的例子在行動:

#include <stdio.h> 

int main() { 
    int out = 10; 
    int in[4]; 

    printf("%d %i %x %o\n", out, out, out, out); 
    sscanf("010 010 010 010", "%d %i %x %o", &in[0], &in[1], &in[2], &in[3]); 
    printf("%d %d %d %d\n", in[0], in[1], in[2], in[3]); 
    sscanf("0x10 10 010", "%i %i %i", &in[0], &in[1], &in[2]); 
    printf("%d %d %d\n", in[0], in[1], in[2]); 

    return 0; 
} 

所以,如果你想輸入的基礎依賴於前綴,你應該只使用%i;如果輸入基礎應該固定,則應使用%d,%x%o。特別是,領先的0使您處於八進制模式的事實可以吸引您。

+0

感謝您解釋爲什麼%我行事的方式。 – clementine

7

http://en.wikipedia.org/wiki/Printf_format_string似乎是說,它是小數,我已經猜到

d,i

INT作爲一個符號十進制數。 '%d'和'%i'是 輸出的同義詞,但與scanf()一起用於輸入時會有所不同(使用%i時 會將數字解釋爲十六進制(如果它前面有0x)和 八進制0.)

相關問題