回答:
出力に使用する場合、たとえばと同じprintf
です。
ただし、これらは入力指定子として使用する場合とは異なります。たとえばscanf
、は%d
整数を符号付き10進数としてスキャンしますが、%i
デフォルトでは10進数ですが、16進数(前に0x
)と8進数(前に)も許可します0
。
したがって033
、27の場合は%i
33、の場合は33になり%d
ます。
%i
との%d
フォーマット指定子に違いはありませんprintf
。これは、C99標準のドラフトセクションに行くことで確認できます。フォーマット指定子に関してもカバーする7.19.6.1
fprintf関数printf
は、段落8で述べています。
変換指定子とその意味は次のとおりです。
次の箇条書きが含まれています。
d,i The int argument is converted to signed decimal in the style [−]dddd. The precision specifies the minimum number of digits to appear; if the value being converted can be represented in fewer digits, it is expanded with leading zeros. The default precision is 1. The result of converting a zero value with a precision of zero is no characters.
一方scanf
、違いがあるため、自動でベースを検出している%d
間、ベースを10と想定し%i
ます。これは、書式指定子に関してカバーするセクション7.19.6.2
fscanf関数に行くことで確認できます。scanf
段落12では次のように述べています。
変換指定子とその意味は次のとおりです。
以下が含まれます。
d Matches an optionally signed decimal integer, whose format is the same as expected for the subject sequence of the strtol function with the value 10 for the base argument. The corresponding argument shall be a pointer to signed integer. i Matches an optionally signed integer, whose format is the same as expected for the subject sequence of the strtol function with the value 0 for the base argument. The corresponding argument shall be a pointer to signed integer.