とでフォーマット指定子として使用される場合の%d
との違いは何ですか?%i
printf
scanf
4 に答える
出力に使用する場合、たとえば。を使用する場合は同じprintf
です。
ただし、これらは入力指定子として使用する場合は異なります。たとえばscanf
、%d
整数を符号付き10進数としてスキャンしますが、%i
デフォルトは10進数ですが、16進数(前に0x
)と8進数(前に)を使用することもできます0
。
したがって、27では033
27になります%i
が、.では33になり%d
ます。
これらはと同じですprintf
が、は異なりscanf
ます。の場合、とprintf
は両方とも符号付き10進整数%d
を指定します。%i
の場合scanf
、%d
および%i
は符号付き整数も意味し%i
ますが、前にある場合は入力を16進数として解釈し、0x
前にある場合は8進数0
として解釈し、それ以外の場合は入力を10進数として解釈します。
%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
、違いがあるため、 autoがベースを検出している%d
間にベース10を想定します。これは、フォーマット指定子に関してカバーするfscanf関数の%i
セクションに移動することで確認できます。段落12には、次のように書かれています。7.19.6.2
scanf
変換指定子とその意味は次のとおりです。
以下が含まれます。
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.
には何もありませんprintf
-2つは同義語です。