Réponses:
Ils sont les mêmes lorsqu'ils sont utilisés pour la sortie, par exemple avec printf
.
Cependant, ceux-ci sont différents lorsqu'ils sont utilisés comme spécificateur d'entrée, par exemple avec scanf
, où %d
scanne un entier sous la forme d'un nombre décimal signé, mais par %i
défaut en décimal mais autorise également hexadécimal (s'il est précédé de 0x
) et octal (s'il est précédé de 0
).
Donc , 033
serait 27 avec , %i
mais 33 avec %d
.
printf
et scanf
.
Ils sont identiques pour printf
mais différents pour scanf
. Pour printf
, à la fois %d
et %i
désigner un entier décimal signé. Pour scanf
, %d
et %i
signifie également un entier signé mais %i
interprète l'entrée comme un nombre hexadécimal si elle est précédée de 0x
et octale si elle est précédée par 0
et interprète autrement l'entrée comme décimale.
Il n'y a aucune différence entre les spécificateurs de format %i
et %d
pour printf
. Nous pouvons le voir en allant au projet de section standard C99 7.19.6.1
La fonction fprintf qui couvre également en ce qui printf
concerne les spécificateurs de format et il est dit au paragraphe 8 :
Les spécificateurs 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.
D'un autre côté car scanf
il y a une différence, %d
supposons la base 10 tandis que l' %i
auto détecte la base. On peut le voir en allant à la section 7.19.6.2
La fonction fscanf qui couvre scanf
en ce qui concerne spécificateur de format, au paragraphe 12 , il dit:
Les spécificateurs 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.