我想知道在printf函數中%D,%d和%i有什麼區別,因爲它們都顯示整數,所以爲什麼會有3種格式來顯示整數?這三種格式之間一定有區別?C中的%i,%d和%D有什麼區別? (printf)
編輯:我還要求%D,不僅是%i和%d。
我想知道在printf函數中%D,%d和%i有什麼區別,因爲它們都顯示整數,所以爲什麼會有3種格式來顯示整數?這三種格式之間一定有區別?C中的%i,%d和%D有什麼區別? (printf)
編輯:我還要求%D,不僅是%i和%d。
首先,%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
}
好的,謝謝。 %D適合我,所以我認爲這是一個像%i和%d這樣的標準。 – Flaz
@Flaz,不僅'%D'是非標準的,而且不同的C庫以不同的方式處理它。不要使用它。檢查你的'printf()'調用來查看實際提供的數據類型,並用適合相應類型的指令(可能是'%ld',但是檢查)替換'%D'。 –
@woz ...028是八進制,十六進制應爲0x28! –
%d
和%i
之間沒有區別,據我所知,%D
是不是一個東西(或者至少,也許它是一個編譯器特定的擴展)。
請參閱http://en.cppreference.com/w/c/io/fprintf或者例如第7.19.6.1節。 C99標準。
http://en.cppreference.com/w/c/io/fprintf –
沒有。參考 - http://www.cplusplus.com/reference/cstdio/printf/ –
沒有'%D',其他兩個*完全等價* –