2017-07-06 97 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标准。

相关问题