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 %deine Ganzzahl als vorzeichenbehaftete Dezimalzahl gescannt wird, der %iStandardwert jedoch dezimal ist, aber auch hexadezimal (wenn vorangestellt 0x) und oktal (falls vorangestellt 0) zulässig sind .
Also 033wäre 27 mit %iaber 33 mit %d.
printfund zu sehen scanf.
Diese sind identisch für, printfaber unterschiedlich für scanf. Für printfbeide %dund %ibezeichnen Sie eine vorzeichenbehaftete Dezimalzahl. Für scanf, %dund %ibedeutet auch eine vorzeichenbehaftete ganze Zahl , aber %iwenn der Eingang inteprets als Hexadezimalzahl mit vorangestellter 0xund oktalen wenn durch voran 0und ansonsten interpretiert die Eingabe als Dezimalzahl.
Es gibt keinen Unterschied zwischen den %iund %dFormatbezeichnern für printf. Wir können sehen , von dem Teilwert Entwurf C99 - Standard Abschnitt 7.19.6.1 Der fprintf Funktion , die auch deckt printfin 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 scanfes jedoch einen Unterschied gibt, %dnehmen Sie die Basis 10 an, während %idie Basis automatisch erkannt wird. Wir können dies sehen, indem wir zum Abschnitt 7.19.6.2 Die fscanf-Funktion gehen, die scanfin 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.