我知道这听起来效率不高,但我正在寻找一种方法来记住printf
次调用的所有格式代码。 %s
,%p
,%f
都很明显,但我无法理解%d
来自哪里。 %i
是否已被其他内容占用?
答案 0 :(得分:94)
代表“decimal”(基数10),而不是“整数”。您可以使用%x
在hexadecimal(基数为16)打印,并%o
打印在octal(基数为8)。整数可以是任何这些基数。
在printf()
中,您可以使用%i
作为%d
的同义词,如果您希望指定“整数”而不是“小数”,但%d
通常是scanf()
首选,因为它更具体。
在输入时,使用%i
,您也可以同时使用%d
和%i
。 0
表示将其解析为任何基数中的整数(八进制,十六进制或十进制,如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
,%o
或0
。特别是,前导{{1}}使您处于八进制模式的事实可能会引起您的注意。
答案 1 :(得分:7)
http://en.wikipedia.org/wiki/Printf_format_string似乎在说我已经猜到了
d,i
int作为带符号的十进制数。 '%d'和'%i'是同义词 输出,但与scanf()一起用于输入时使用不同(使用%i 如果数字前面有0x,则会将数字解释为十六进制数 八进制,如果它前面是0。)