web-dev-qa-db-ja.com

なぜ%dはIntegerの略ですか?

これは生産的に聞こえないことは知っていますが、printf呼び出しのすべてのフォーマットコードを記憶する方法を探しています。 %s%p%fはすべて明らかですが、%dがどこから来たのか理解できません。 %iはすでに別のものに使用されていますか?

74
clementine

「整数」ではなく、「 decimal 」(10を基数)を表します。 %xを使用して 16進数 (ベース16)で印刷し、%oを使用して 8進数 (ベース8)で印刷できます。整数は、これらのベースのいずれかにあります。

printf()では、%i%dの同義語として使用できます。「10進数」ではなく「整数」を指定したい場合は、%dが一般的です。より具体的に。

入力では、scanf()を使用して、%i%dの両方を使用することもできます。 %iは、任意の基数(0または0xプレフィックスで示される8進数、16進数、または10進数)の整数として解析することを意味し、%dは、 10進整数。

動作中のすべての例を次に示します。

#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が8進数モードになっているという事実に追いつくことができます。

94
Brian Campbell

http://en.wikipedia.org/wiki/Printf_format_string は、私が推測したように10進数であると言っているようです

d,i

符号付き10進数としてのint。 「%d」と「%i」は出力の同義語ですが、入力にscanf()を使用する場合は異なります(%iを使用すると、数値が0xで始まる場合は16進数、0で始まる場合は8進数として解釈されます)

7
Juan Mendes