Quelle est la différence entre les i des indicateurs de conversion% et% d dans les fonctions IO formatées (* printf / * scanf)

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

Question

Quelle est la différence entre %d et %i lorsqu'il est utilisé comme spécificateurs de format dans printf?

Était-ce utile?

La solution

Ce sont les mêmes lorsqu'ils sont utilisés pour la production, par exemple, avec printf.

Cependant, ceux-ci sont différents lorsqu'il est utilisé comme entrée par exemple spécificateur avec scanf, où %d balaye un nombre entier en tant que nombre décimal signé, mais par défaut %i en décimal, mais permet également hexadécimal (si elle est précédée par 0x) et octal (si elle est précédée par 0).

033 serait 27 avec %i mais 33 avec %d.

Autres conseils

Ce sont identiques pour printf mais différent pour scanf. Pour printf, à la fois %d et %i désignent un nombre entier décimal signé. Pour scanf, %d et %i signifie aussi un entier signé mais %i inteprets l'entrée comme un nombre hexadécimal si elle est précédée par 0x et octal si elle est précédée par 0 et interprète autrement l'entrée en décimal.

Il n'y a pas de différence entre les %i et le format de %d pour spécificateurs printf. On peut le voir en allant à la projet de norme C99 section 7.19.6.1 La fonction fprintf qui couvre également printf par rapport au spécificateurs et il est dit au paragraphe 8 :

  

Les indicateurs de conversion et leurs significations sont:

et comprend la puce suivante:

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.

Par contre pour scanf il y a une différence, %d assumer base 10 en auto %i détecte la base. On peut le voir en allant à la section 7.19.6.2 La fonction fscanf qui couvre scanf par rapport au spécificateur de format, au paragraphe 12 il dit:

  

Les indicateurs de conversion et leurs significations sont:

et comprend les éléments suivants:

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.

Il n'y a pas dans printf - les deux sont synonymes

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top