logo

Diferència entre l'especificador de format %d i %i en llenguatge C

Un especificador de format és un caràcter especial o una seqüència de caràcters utilitzats per definir el tipus de dades que s'imprimiran a la pantalla o el tipus de dades que s'escanejaran des de l'entrada estàndard. Un especificador de format comença amb un caràcter '%' seguit de la seqüència de caràcters per a diferents tipus de dades.

En resum, ens indica quin tipus de dades emmagatzemar i quines imprimir. Els especificadors de format s'utilitzen principalment amb les funcions scanf() i printf().



Per exemple, si volem llegir i imprimir un nombre enter utilitzant scanf() i printf(), s'utilitzen %i o %d però hi ha una diferència subtil en ambdues %i i %d especificador de format .

%d especifica el nombre sencer decimal amb signe mentre que %i especifica el nombre enter de diverses bases.

'%d' i '%i' es comporten de manera similar amb printf()

No hi ha cap diferència entre els especificadors de format %i i %d quan s'utilitzen amb printf.



Considereu l'exemple següent.

C






// 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;> }>

>

>

la roda de desplaçament no funciona
Sortida

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

El comportament de %d i %i és diferent amb scanf()

%d assumeix la base 10 mentre que %i detecta automàticament la base.

Per tant, ambdós especificadors es comporten de manera diferent quan s'utilitzen amb una funció d'entrada. Per tant, el valor de 012 seria 10 amb %i però 12 amb %d.

    %d pren un valor sencer com a nombre sencer decimal amb signe, és a dir, pren valors negatius juntament amb valors positius, però els valors haurien d'estar en decimal, en cas contrari, imprimirà un valor d'escombraries.
    ( Nota : Si l'entrada està en format octal com 012, llavors %d ignorarà 0 i prendrà l'entrada com a 12).
    %i pren un valor enter com a valor enter amb tipus decimal, hexadecimal o octal.
    Per introduir un valor en format hexadecimal, el valor s'ha de proporcionar abans de 0x i per introduir un valor en format octal, el valor s'ha de proporcionar abans de 0.

Considereu l'exemple següent.

C


755 chmod



// 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;> }>

>

>

Sortida

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>

Explicació

  • El valor decimal d'a com a 12 és 12
  • El valor decimal de b com a 12 (octal) és 10
  • El valor decimal de c com a 12 (hexadecimal) és 18