logo

Skirtumas tarp %d ir %i formato specifikatoriaus C kalba

Formato specifikacija yra specialus simbolis arba simbolių seka, naudojama ekrane spausdinamų duomenų tipui arba iš standartinės įvesties nuskaitytinų duomenų tipui apibrėžti. Formato specifikacija prasideda simboliu „%“, po kurio seka skirtingų tipų duomenų simbolių seka.

Trumpai tariant, jis nurodo, kokio tipo duomenis reikia saugoti ir kokius spausdinti. Formato specifikacijos pirmiausia naudojamos su funkcijomis scanf() ir printf().



Pavyzdžiui, jei norime perskaityti ir spausdinti sveikąjį skaičių naudodami scanf() ir printf() funkcijos, naudojamas arba %i, arba %d, bet abiejose yra nedidelis skirtumas %i ir %d formato specifikatorius .

%d nurodo sveikąjį dešimtainį skaičių, o %i – įvairių bazių sveikąjį skaičių.

„%d“ ir „%i“ elgiasi panašiai su printf()

Nėra skirtumo tarp %i ir %d formato specifikacijų, kai naudojami su printf.



Apsvarstykite toliau pateiktą pavyzdį.

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

>

>

Išvestis

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

%d ir %i elgesys skiriasi naudojant scanf()

%d daro prielaidą, kad bazė yra 10, o %i automatiškai aptinka bazę.

Todėl abu specifikatoriai elgiasi skirtingai, kai jie naudojami su įvesties funkcija. Taigi, 012 reikšmė būtų 10 su %i, bet 12 su %d.

    %d paima sveikojo skaičiaus reikšmę kaip dešimtainį sveikąjį skaičių, t. y. neigiamas reikšmes kartu su teigiamomis reikšmėmis, bet vertės turi būti dešimtainės, kitaip bus išspausdinta šiukšlių reikšmė.
    ( Pastaba : Jei įvestis yra aštuntainio formato, pvz., 012, %d nepaisys 0 ir įvestį ims kaip 12).
    %i paima sveikojo skaičiaus reikšmę kaip dešimtainio, šešioliktainio ar aštuntainio tipo skaičių.
    Norint įvesti reikšmę šešioliktainiu formatu, vertė turi būti pateikta prieš 0x, o norint įvesti reikšmę aštuntainiu formatu, vertė turi būti pateikta prieš 0.

Apsvarstykite toliau pateiktą pavyzdį.

C




stovint

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

>

>

Išvestis

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>

Paaiškinimas

  • Dešimtainė a as 12 reikšmė yra 12
  • Dešimtainė b reikšmė kaip 12 (aštuontainė) yra 10
  • Dešimtainė c reikšmė kaip 12 (šešioliktainė) yra 18