为什么%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或十进制,如0
或0x
前缀所示)中的整数,而%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,则解释为八进制)