Was ist der Unterschied zwischen Konvertierungsspezifizierer% i% und d in formatiertem IO-Funktionen (* printf / * Scanf)
-
19-09-2019 - |
Frage
Was ist der Unterschied zwischen %d
und %i
, wenn sie als Formatbezeichner in printf
verwendet?
Lösung
Sie sind die gleichen, wenn für die Ausgabe verwendet, z.B. mit printf
.
Diese sind jedoch anders, wenn als Eingang Spezifizierer z.B. verwendet mit scanf
, wo %d
eine ganze Zahl als eine vorzeichenbehaftete Dezimalzahl abtastet, aber %i
Standardwerte dezimal sondern erlaubt auch die hexadezimale (falls von 0x
voran) und oktalen (falls von 0
voran).
So 033
27 mit %i
sein würde, aber 33 mit %d
.
Andere Tipps
Diese sind identisch für printf
aber unterschiedlich für scanf
. Für printf
sowohl %d
%i
und eine signierte ganze Dezimalzahl bezeichnen. Für scanf
, %d
und %i
bedeutet auch eine ganze Zahl mit Vorzeichen aber %i
inteprets die Eingabe als hexadezimale Zahl von 0x
und Oktal voraus, wenn, wenn sie von 0
voran und interpretiert sonst die Eingabe als Dezimalzahl.
Es gibt keinen Unterschied zwischen der %i
und %d
Formatbezeichner für printf
. Wir können sehen, indem Sie auf den Entwurf C99-Standard geht Abschnitt 7.19.6.1
Die fprintf Funktion , die auch printf
in Bezug auf Formatbezeich abdeckt und es sagt in Absatz 8 :
Die Konvertierungsspezifizierer und ihre Bedeutung:
und enthält 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.
Auf der anderen Seite für scanf
gibt es einen Unterschied, %d
Basis annehmen 10, während %i
Auto die Basis erfasst. Wir können sehen, von Abschnitt 7.19.6.2
gehen Die fscanf Funktion , die scanf
in Bezug auf Formatspezifizierer umfasst, in Absatz 12 es sagt:
Die Konvertierungsspezifizierer und ihre Bedeutung:
und beinhaltet folgende Leistungen:
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.
Es gibt keine in printf
- die beiden Synonyme sind