logo

Ero muotomääritteen %d ja %i välillä C-kielellä

Muotomäärittäjä on erikoismerkki tai merkkijono, jota käytetään määrittämään näytölle tulostettavan tiedon tyyppi tai vakiosyötteestä skannattavien tietojen tyyppi. Muotomäärittely alkaa %-merkillä, jota seuraa erityyppisten tietojen merkkijono.

Lyhyesti sanottuna se kertoo meille, minkä tyyppiset tiedot tallennetaan ja mitkä tulostetaan. Muotomäärityksiä käytetään pääasiassa scanf()- ja printf()-funktioiden kanssa.



Esimerkiksi jos haluamme lukea ja tulostaa kokonaisluvun käyttämällä scanf() ja printf()-funktioita, joko %i tai %d käytetään, mutta molemmissa on pieni ero %i ja %d muodon määrittäjä .

%d määrittää etumerkillisen desimaalin kokonaisluvun, kun taas %i määrittää eri kantalukujen kokonaisluvun.

'%d' ja '%i' toimivat samalla tavalla printf()

%i- ja %d-muotomääritteiden välillä ei ole eroa, kun niitä käytetään printf:n kanssa.



Harkitse seuraavaa esimerkkiä.

C




linkedlist java



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

>

>

Lähtö

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

%d ja %i käyttäytyminen eroaa komennolla scanf()

%d olettaa kantaa 10, kun taas %i automaattisesti tunnistaa kannan.

Siksi molemmat määrittimet käyttäytyvät eri tavalla, kun niitä käytetään syöttöfunktion kanssa. Joten 012:n arvo olisi 10 %i:n kanssa, mutta 12 %d:n kanssa.

    %d ottaa kokonaisluvun etumerkittynä desimaalilukuna, eli se ottaa negatiiviset arvot positiivisten arvojen rinnalla, mutta arvojen tulee olla desimaalilukuina, muuten se tulostaa roskaarvon.
    ( Huomautus : Jos syöte on oktaalimuodossa, kuten 012, %d jättää huomioimatta 0:n ja ottaa syötteen 12).
    %i ottaa kokonaisluvun arvon desimaali-, heksadesimaali- tai oktaalityypin kokonaislukuarvona.
    Jos haluat syöttää arvon heksadesimaalimuodossa, arvo tulee antaa edeltävällä 0x:lla ja oktaalimuodossa olevan arvon syöttämiseksi edeltävällä 0:lla.

Harkitse seuraavaa esimerkkiä.

C




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

>

>

Lähtö

nimi kaupunki Yhdysvalloissa
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>

Selitys

  • A as 12:n desimaaliarvo on 12
  • B:n desimaaliarvo 12:na (oktaali) on 10
  • C:n desimaaliarvo 12:na (heksadesimaali) on 18