214

とでフォーマット指定子として使用される場合の%dとの違いは何ですか?%iprintfscanf

4

4 に答える 4

299

出力に使用する場合、たとえば。を使用する場合は同じprintfです。

ただし、これらは入力指定子として使用する場合は異なります。たとえばscanf%d整数を符号付き10進数としてスキャンしますが、%iデフォルトは10進数ですが、16進数(前に0x)と8進数(前に)を使用することもできます0

したがって、27では03327になります%iが、.では33になり%dます。

于 2009-12-12T13:58:07.477 に答える
71

これらはと同じですprintfが、は異なりscanfます。の場合、とprintfは両方とも符号付き10進整数%dを指定します。%iの場合scanf%dおよび%iは符号付き整数も意味し%iますが、前にある場合は入力を16進数として解釈し、0x前にある場合は8進数0として解釈し、それ以外の場合は入力を10進数として解釈します。

于 2009-12-12T13:53:20.057 に答える
20

%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.
于 2014-08-28T20:07:53.793 に答える
3

には何もありませんprintf-2つは同義語です。

于 2009-12-12T13:52:02.197 に答える