logo

Différence entre les spécificateurs de format %d et %i en langage C

Un spécificateur de format est un caractère spécial ou une séquence de caractères utilisé pour définir le type de données à imprimer sur l'écran ou le type de données à numériser à partir de l'entrée standard. Un spécificateur de format commence par un caractère « % » suivi de la séquence de caractères pour différents types de données.

En bref, il nous indique quel type de données stocker et lesquelles imprimer. Les spécificateurs de format sont principalement utilisés avec les fonctions scanf() et printf().



Par exemple, si nous voulons lire et imprimer un entier en utilisant scanf() et les fonctions printf(), %i ou %d sont utilisés mais il y a une différence subtile dans les deux %je et %d spécificateur de format .

%d spécifie un entier décimal signé tandis que %i spécifie un entier de différentes bases.

'%d' et '%i' se comportent de la même manière avec printf()

Il n'y a aucune différence entre les spécificateurs de format %i et %d lorsqu'ils sont utilisés avec printf.



Considérez l'exemple suivant.

C




quel est 25 sur 100



// C program to demonstrate> // the behavior of %i and %d> // with printf statement> #include> int> main()> {> >int> num = 9;> >// print value using %d> >printf>(>'Value of num using %%d is = %d '>, num);> >// print value using %i> >printf>(>'Value of num using %%i is = %i '>, num);> >return> 0;> }>

>

>

Sortir

Value of num using %d is = 9 Value of num using %i is = 9>

Le comportement de %d et %i est différent avec scanf()

%d suppose la base 10 tandis que %i détecte automatiquement la base.

Par conséquent, les deux spécificateurs se comportent différemment lorsqu’ils sont utilisés avec une fonction d’entrée. Ainsi, la valeur de 012 serait 10 avec %i mais 12 avec %d.

programmes Java
    %d prend une valeur entière sous forme d'entier décimal signé, c'est-à-dire qu'il prend des valeurs négatives ainsi que des valeurs positives, mais les valeurs doivent être en décimal, sinon il imprimera une valeur inutile.
    ( Note : Si l'entrée est au format octal comme 012, alors %d ignorera 0 et prendra l'entrée comme 12).
    %i prend une valeur entière comme valeur entière de type décimal, hexadécimal ou octal.
    Pour saisir une valeur au format hexadécimal, la valeur doit être fournie en précédant 0x et pour saisir une valeur en valeur au format octal, la valeur doit être fournie en précédant 0.

Considérez l'exemple suivant.

C


date convertir en chaîne



// C program to demonstrate the difference> // between %i and %d specifier> #include> int> main()> {> >int> a, b, c;> >printf>(>'Enter value of a in decimal format:'>);> >scanf>(>'%d'>, &a);> >printf>(>'Enter value of b in octal format: '>);> >scanf>(>'%i'>, &b);> >printf>(>'Enter value of c in hexadecimal format: '>);> >scanf>(>'%i'>, &c);> >printf>(>'a = %i, b = %i, c = %i'>, a, b, c);> >return> 0;> }>

>

>

Sortir

Enter value of a in decimal format: 12 Enter value of b in octal format: 012 Enter value of c in hexadecimal format: 0x12 a = 12, b = 10, c = 18>

Explication

  • La valeur décimale de a comme 12 est 12
  • La valeur décimale de b comme 12 (octal) est 10
  • La valeur décimale de c comme 12 (hexadécimal) est 18