为什么%d代表整数?

时间:2012-11-16 01:19:10

标签: c formatting printf

我知道这听起来效率不高,但我正在寻找一种方法来记住printf次调用的所有格式代码。 %s%p%f都很明显,但我无法理解%d来自哪里。 %i是否已被其他内容占用?

2 个答案:

答案 0 :(得分:94)

代表“decimal”(基数10),而不是“整数”。您可以使用%xhexadecimal(基数为16)打印,并%o打印在octal(基数为8)。整数可以是任何这些基数。

printf()中,您可以使用%i作为%d的同义词,如果您希望指定“整数”而不是“小数”,但%d通常是scanf()首选,因为它更具体。

在输入时,使用%i,您也可以同时使用%d%i0表示将其解析为任何基数中的整数(八进制,十六进制或十进制,如0x%d前缀所示),而#include <stdio.h> int main() { int out = 10; int in[4]; printf("%d %i %x %o\n", out, out, out, out); sscanf("010 010 010 010", "%d %i %x %o", &in[0], &in[1], &in[2], &in[3]); printf("%d %d %d %d\n", in[0], in[1], in[2], in[3]); sscanf("0x10 10 010", "%i %i %i", &in[0], &in[1], &in[2]); printf("%d %d %d\n", in[0], in[1], in[2]); return 0; } 表示将其解析为十进制整数。

以下是其中所有动作的示例:

%i

因此,如果您希望输入库依赖于前缀,则应该只使用%d;如果应修复输入库,则应使用%x%o0。特别是,前导{{1}}使您处于八进制模式的事实可能会引起您的注意。

答案 1 :(得分:7)

http://en.wikipedia.org/wiki/Printf_format_string似乎在说我已经猜到了

d,i

  

int作为带符号的十进制数。 '%d'和'%i'是同义词   输出,但与scanf()一起用于输入时使用不同(使用%i   如果数字前面有0x,则会将数字解释为十六进制数   八进制,如果它前面是0。)