为什么%d代表整数?

我知道这听起来不是很有效,但我正在寻找一种方法来记住printf调用的所有格式化代码。 %s%p%f都很明显,但我不明白%d是从哪里来的。 %i已经被其他东西占用了吗?

它代表“ 十进制 ”(10 进制 ),而不是“整数”。 您可以使用%x以hex (基数16)打印, %o以八进制打印(基数8)。 一个整数可以在任何这些基数中。

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

在input时,使用scanf() ,你可以同时使用%i%d%i表示将其parsing为任意基数(八进制,hex或十进制,如00x前缀所示)中的整数,而%d表示将其parsing为十进制整数。

以下是所有这些实例的示例:

 #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; } 

所以,如果你想要input基础依赖于前缀,你应该只使用%i ; 如果input库应该是固定的,则应使用%d%x%o 。 特别是,一个领先的0让你进入八进制模式的事实可以赶上你。

http://en.wikipedia.org/wiki/Printf_format_string似乎认为这是十进制的,因为我已经猜到了;

d,i

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