Antworten:
Sie sind die gleichen, wenn sie für die Ausgabe verwendet werden, z printf
. B. mit .
Diese unterscheiden sich jedoch, wenn sie als Eingabespezifizierer verwendet werden, z. B. mit scanf
, wobei %d
eine Ganzzahl als vorzeichenbehaftete Dezimalzahl gescannt wird, der %i
Standardwert jedoch dezimal ist, aber auch hexadezimal (wenn vorangestellt 0x
) und oktal (falls vorangestellt 0
) zulässig sind .
Also 033
wäre 27 mit %i
aber 33 mit %d
.
printf
und zu sehen scanf
.
Diese sind identisch für, printf
aber unterschiedlich für scanf
. Für printf
beide %d
und %i
bezeichnen Sie eine vorzeichenbehaftete Dezimalzahl. Für scanf
, %d
und %i
bedeutet auch eine vorzeichenbehaftete ganze Zahl , aber %i
wenn der Eingang inteprets als Hexadezimalzahl mit vorangestellter 0x
und oktalen wenn durch voran 0
und ansonsten interpretiert die Eingabe als Dezimalzahl.
Es gibt keinen Unterschied zwischen den %i
und %d
Formatbezeichnern für printf
. Wir können sehen , von dem Teilwert Entwurf C99 - Standard Abschnitt 7.19.6.1
Der fprintf Funktion , die auch deckt printf
in Bezug auf Formatbezeich und es sagt in Absatz 8 :
Die Konvertierungsspezifizierer und ihre Bedeutungen sind:
und enthält die folgende Kugel:
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.
Wenn scanf
es jedoch einen Unterschied gibt, %d
nehmen Sie die Basis 10 an, während %i
die Basis automatisch erkannt wird. Wir können dies sehen, indem wir zum Abschnitt 7.19.6.2
Die fscanf-Funktion gehen, die scanf
in Bezug auf den Formatbezeichner behandelt wird. In Absatz 12 heißt es:
Die Konvertierungsspezifizierer und ihre Bedeutungen sind:
und umfasst Folgendes:
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.