80

これは生産的ではないように思えますが、printf呼び出しのすべての書式設定コードを覚える方法を探しています。%s%p、すべて明らかですが、どこから来たの%fかわかりません。%dすでに他の何か%iに取られていますか?

4

2 に答える 2

98

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

では、「10 進数」ではなく「整数」を示すことを好む場合は、 の同義語としてprintf()使用できますが、より具体的であるため、一般的に好まれます。%i%d%d

入力時に を使用すると、とのscanf()両方を使用できます。は、任意の基数 (または接頭辞で示されるように、8 進数、16 進数、または 10 進数)の整数として解析することを意味し、10 進数の整数として解析することを意味します。%i%d%i00x%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によって 8 進モードになるという事実は、追いつくことができます。

于 2012-11-16T01:22:34.747 に答える
8

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

d,i

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

于 2012-11-16T01:23:29.810 に答える