C中%i,%d和%D之间有什么区别?(printf的)

Fla*_*laz 1 c printf

我想知道printf函数中%D,%d和%i之间的区别是什么,因为它们都显示整数,那么为什么有3种格式来显示整数?这三种格式之间一定有区别吗?

编辑:我也要求%D,不仅仅是%i和%d.

woz*_*woz 7

首先,%D不是标准.

当谈到%d并且%i,输出没有区别(例如:)printf,正如评论中的一些用户和Oliver Charlesworth对他的回答所指出的那样.

但是,对于输入数据(例如:),scanf您可以使用%i扫描十六进制值(如果前面带有0x)或八进制(如果前面带有0).其默认行为将扫描十进制值.

例如:如果你使用%ilike 输入一些数据0x28,它将与40dec 相同.

编辑:一些代码作为示例:

#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
}
Run Code Online (Sandbox Code Playgroud)

  • @Flaz,不仅是'%D`非标准,而且不同的C库以不同的方式处理它.不要使用它.检查你的`printf()`调用以查看实际提供的数据类型,并用适合相应类型的指令替换`%D`(可能是`%ld`,但检查). (4认同)
  • @woz ... 028是八进制,十六进制应为0x28! (2认同)
  • 就像@SergioFormiggini所说的那样,在scanf中,%i将以八进制解释028,并将2分配给变量,留下8以供以后消费.0x28将被解释为十六进制并为变量赋值40. (2认同)