logo

C言語の書式指定子%dと%iの違い

形式指定子は、画面に印刷されるデータのタイプ、または標準入力からスキャンされるデータのタイプを定義するために使用される特殊文字または文字のシーケンスです。形式指定子は「%」文字で始まり、その後にさまざまな種類のデータの文字列が続きます。

常にVerilog

つまり、どのタイプのデータを保存し、どのデータを印刷するかを指定します。形式指定子は主に scanf() 関数と printf() 関数で使用されます。



たとえば、次を使用して整数を読み取って出力したい場合、 scanf() および printf() 関数では、%i または %d のいずれかが使用されますが、両方には微妙な違いがあります。 %私 そして %d フォーマット指定子

%d は符号付き 10 進整数を指定し、%i はさまざまな基数の整数を指定します。

「%d」と「%i」は printf() と同様に動作します

printf と一緒に使用する場合、%i と %d の形式指定子に違いはありません。



次の例を考えてみましょう。

C






// C program to demonstrate> // the behavior of %i and %d> // with printf statement> #include> int> main()> {> >int> num = 9;> >// print value using %d> >printf>(>'Value of num using %%d is = %d '>, num);> >// print value using %i> >printf>(>'Value of num using %%i is = %i '>, num);> >return> 0;> }>

>

>

Java数学ランダム
出力

Value of num using %d is = 9 Value of num using %i is = 9>

%d と %i の動作は scanf() とは異なります

%d は基数 10 を想定し、%i は基数を自動検出します。

改行Python

したがって、両方の指定子を入力関数で使用した場合の動作は異なります。したがって、012 の値は、%i では 10 になりますが、%d では 12 になります。

    %d は整数値を符号付き 10 進整数として受け取ります。つまり、正の値とともに負の値も受け取りますが、値は 10 進数で指定する必要があります。そうしないと、ガベージ値が出力されます。
    ( 注記 : 入力が 012 のような 8 進形式の場合、%d は 0 を無視し、入力を 12 として受け取ります。
    %i は、10 進数、16 進数、または 8 進数タイプの整数値を受け取ります。
    16 進数形式で値を入力するには、値の前に 0x を付けて指定する必要があり、8 進数形式で値を入力するには、値の前に 0 を付けて指定する必要があります。

次の例を考えてみましょう。

C




// C program to demonstrate the difference> // between %i and %d specifier> #include> int> main()> {> >int> a, b, c;> >printf>(>'Enter value of a in decimal format:'>);> >scanf>(>'%d'>, &a);> >printf>(>'Enter value of b in octal format: '>);> >scanf>(>'%i'>, &b);> >printf>(>'Enter value of c in hexadecimal format: '>);> >scanf>(>'%i'>, &c);> >printf>(>'a = %i, b = %i, c = %i'>, a, b, c);> >return> 0;> }>

>

二分探索木からの削除

>

出力

Enter value of a in decimal format: 12 Enter value of b in octal format: 012 Enter value of c in hexadecimal format: 0x12 a = 12, b = 10, c = 18>

説明

  • a の 10 進数値は 12 です。
  • b の 10 進数値 12 (8 進数) は 10 です
  • c の 10 進数値 12 (16 進数) は 18 です