Il n'y a pas de différence entre les %i
y %d
les spécificateurs de format pour printf
. Nous pouvons voir cela en allant dans le projet de norme C99 section 7.19.6.1
La fonction fprintf qui couvre également printf
en ce qui concerne les spécificateurs de format et il est dit dans le paragraphe 8 :
Les spécificateurs de conversion et leurs significations sont les suivants :
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.
En revanche, pour scanf
il y a une différence, %d
suppose une base 10 tandis que %i
détecte automatiquement la base. Nous pouvons voir cela en allant dans la section 7.19.6.2
La fonction fscanf qui couvre scanf
en ce qui concerne le spécificateur de format, au paragraphe 12 il est dit :
Les spécificateurs de conversion et leurs significations sont les suivants :
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.