Was ist der Unterschied zwischen Konvertierungsspezifizierer% i% und d in formatiertem IO-Funktionen (* printf / * Scanf)

StackOverflow https://stackoverflow.com/questions/1893490

Frage

Was ist der Unterschied zwischen %d und %i, wenn sie als Formatbezeichner in printf verwendet?

War es hilfreich?

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

.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top