我知道这听起来并不高效,但我正在寻找一种方法来记住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 回答