我想知道在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',其他两个*完全等价* –