为什么%d代表整数?

cle*_*ine 74 c formatting printf

我知道这听起来不高效,但我正在寻找一种方法来记住所有的printf调用格式代码.%s,%p,%f都是显而易见的,但我不明白的地方%d,从说到.是%i已经采取的其他什么东西?

Bri*_*ell 94

它代表" 十进制 "(基数10),而不是"整数".您可以使用%x在打印十六进制(基数为16),并%o在打印八进制(基数8).整数可以是任何这些基数.

在printf(),您可以使用%i作为同义词%d,如果您更喜欢指示"整数"而不是"十进制",但%d通常是首选,因为它更具体.

在输入时,使用scanf()时,可以使用同时使用%i,并%d为好.%i表示将其解析为任何基数(八进制,十六进制或十进制,如a 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;
}
Run Code Online (Sandbox Code Playgroud)

因此,只有%i在希望输入库依赖于前缀时才应该使用; 如果输入的基础应该是固定的,你应该使用%d,%x或%o.特别是,领先者0让你进入八进制模式这一事实可以引起你的注意.


Jua*_*des 7

http://en.wikipedia.org/wiki/Printf_format_string似乎说它是十进制的,因为我猜到了

d,i

int作为带符号的十进制数.'%d'和'%i'是输出的同义词,但与scanf()一起用于输入时是不同的(使用%i将数字解释为十六进制(如果前面是0x),八进制(如果它前面是0).