我知道这听起来并不高效,但我正在寻找一种方法来记住printf
呼叫的所有格式代码。%s
, %p
,%f
都是显而易见的,但我不明白%d
从哪里来。已经被%i
别的东西占用了?
问问题
82768 次
2 回答
98
它代表“十进制”(以 10 为底),而不是“整数”。您可以使用%x
以十六进制(以 16 为底)打印,并%o
以八进制(以 8 为底)打印。一个整数可以是这些基数中的任何一个。
在中,如果您更喜欢表示“整数”而不是“十进制”,则printf()
可以将%i
其用作 的同义词,但通常首选它,因为它更具体。%d
%d
在输入时, using scanf()
,您可以同时使用%i
和%d
。%i
意味着将其解析为任何基数的整数(八进制、十六进制或十进制,由 a0
或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
使您进入八进制模式这一事实可以赶上您。
于 2012-11-16T01:22:34.747 回答
8
http://en.wikipedia.org/wiki/Printf_format_string似乎说它是十进制的,正如我猜测的那样
d,i
int 作为带符号的十进制数。'%d' 和 '%i' 是输出的同义词,但在与 scanf() 一起用于输入时是不同的(如果数字前面有 0x,则使用 %i 会将数字解释为十六进制,如果前面有 0,则将其解释为八进制。)
于 2012-11-16T01:23:29.810 回答