logo

Diferența dintre specificatorul de format %d și %i în limbajul C

Un specificator de format este un caracter special sau o secvență de caractere folosită pentru a defini tipul de date care urmează să fie tipărite pe ecran sau tipul de date care urmează să fie scanate de la intrarea standard. Un specificator de format începe cu un caracter „%” urmat de secvența de caractere pentru diferite tipuri de date.

Pe scurt, ne spune ce tip de date să stocăm și pe care să imprimăm. Specificatorii de format sunt utilizați în principal cu funcțiile scanf() și printf().



De exemplu, dacă vrem să citim și să tipărim un întreg folosind scanf() și printf(), este folosit fie %i, fie %d, dar există o diferență subtilă în ambele %i și %d specificatorul de format .

tipuri de învățare automată

%d specifică întregul zecimal cu semn, în timp ce %i specifică întregul de diferite baze.

„%d” și „%i” se comportă similar cu printf()

Nu există nicio diferență între specificatorii de format %i și %d când sunt utilizați cu printf.



Luați în considerare următorul exemplu.

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

>

string.format java

>

Ieșire

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

Comportamentul %d și %i este diferit cu scanf()

%d presupune baza 10 în timp ce %i detectează automat baza.

Prin urmare, ambii specificatori se comportă diferit atunci când sunt utilizați cu o funcție de intrare. Deci, valoarea lui 012 ar fi 10 cu %i, dar 12 cu %d.

    %d ia o valoare întreagă ca un întreg zecimal cu semn, adică ia valori negative împreună cu valori pozitive, dar valorile ar trebui să fie în zecimală, altfel se va imprima o valoare de gunoi.
    ( Notă : Dacă intrarea este în format octal, cum ar fi 012, atunci %d va ignora 0 și va lua intrarea ca 12).
    %i ia o valoare întreagă ca valoare întreagă cu tip zecimal, hexazecimal sau octal.
    Pentru a introduce o valoare în format hexazecimal, valoarea trebuie furnizată precedând 0x, iar pentru a introduce o valoare în format octal, valoarea trebuie furnizată precedând 0.

Luați în considerare următorul exemplu.

C


java obține ora curentă



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

>

>

Ieșire

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>

Explicaţie

  • Valoarea zecimală a lui a ca 12 este 12
  • Valoarea zecimală a lui b ca 12 (octal) este 10
  • Valoarea zecimală a lui c ca 12 (hexazecimal) este 18