%i と %d を使用したフォーマットされた IO: 詳細な比較
printf や scanf などのフォーマットされた IO 関数を使用する場合、微妙な違いを理解する形式指定子の間が重要です。 2 つの一般的な指定子 %d と %i は、それぞれの異なる動作が完全に理解されていない場合、混乱を招く可能性があります。
出力: 同一の機能
If %i と % d は出力目的 (つまり、printf) に使用されますが、それらの間に目立った違いはありません。どちらの指定子も、10 進数、16 進数、8 進数に関係なく、同じ出力を生成します。
入力: 区別が現れる場所
ただし、これらの指定子を入力に使用する場合は、 (つまり、scanf では)、明確な違いが生じます。 %d は、入力を符号付き 10 進形式の整数として解釈します。これは、-512 のような数値が正しく認識され、負の値が割り当てられることを意味します。
対照的に、%i はデフォルトで 10 進数で解釈されますが、より柔軟な性質を示します。 10 進整数を処理するだけでなく、関連する接頭辞が前に付いている場合は 16 進値および 8 進値にも対応します。たとえば、0x1A は 16 進数として解釈され、023 は 8 進数として認識されます。
実際の例
入力文字列「033」を考えてみましょう。 scanf が %d を使用してこれを読み取る場合、それを 10 進整数 33 として扱います。ただし、%i を使用すると、scanf は先頭の 0 を 8 進接頭辞として認識し、その結果、整数 27 が変数に割り当てられます。
結論
要約すると、%i と %d は同様のパフォーマンスを示します。フォーマットされた IO 関数で出力すると、入力に対して異なる動作を示します。 %d は入力を符号付き 10 進数に制限しますが、%i は 16 進値と 8 進値に対応することにより、より汎用性を提供します。この区別を理解することは、C プログラムで正確な入力処理を行うために不可欠です。
以上がC のフォーマットされた I/O における %i と %d: 違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。