2017-07-06 223 views
1

我想知道在printf函數中%D,%d和%i有什麼區別,因爲它們都顯示整數,所以爲什麼會有3種格式來顯示整數?這三種格式之間一定有區別?C中的%i,%d和%D有什麼區別? (printf)

編輯:我還要求%D,不僅是%i和%d。

+0

http://en.cppreference.com/w/c/io/fprintf –

+0

沒有。參考 - http://www.cplusplus.com/reference/cstdio/printf/ –

+0

沒有'%D',其他兩個*完全等價* –

回答

7

首先,%D不是標準。

當談到%d%i,有輸出沒有區別(例如:printf),通過對意見和Oliver Charlesworth對他的回答有些用戶如指出。

但是,對於輸入數據(例如:scanf),您可以使用%i來掃描十六進制值(如果前面有0x)或八進制(如果前面有0)。其默認行爲將掃描十進制值。

例如:如果您使用%i(如0x28)輸入一些數據,則它將與dec。中的40相同。

編輯:一些代碼作爲示例:

#include <stdio.h> 
int main(){ 
    int dec, hex; 
    scanf("%i",&hex); //For example, hex = 0x28 
    scanf("%d",&dec); //For example, dec = 28 
    printf("Hex: %d\nDec: %d\n",hex,dec); // outputs: Hex = 40, Dec = 28 
} 
+0

好的,謝謝。 %D適合我,所以我認爲這是一個像%i和%d這樣的標準。 – Flaz

+4

@Flaz,不僅'%D'是非標準的,而且不同的C庫以不同的方式處理它。不要使用它。檢查你的'printf()'調用來查看實際提供的數據類型,並用適合相應類型的指令(可能是'%ld',但是檢查)替換'%D'。 –

+2

@woz ...028是八進制,十六進制應爲0x28! –

4

%d%i之間沒有區別,據我所知,%D是不是一個東西(或者至少,也許它是一個編譯器特定的擴展)。

請參閱http://en.cppreference.com/w/c/io/fprintf或者例如第7.19.6.1節。 C99標準。

相關問題