logo

Verschil tussen %d en %i formaatspecificatie in C-taal

Een formaatspecificatie is een speciaal teken of een reeks tekens die wordt gebruikt om het type gegevens te definiëren dat op het scherm moet worden afgedrukt of het type gegevens dat vanuit standaardinvoer moet worden gescand. Een formaatspecificatie begint met een ‘%’-teken, gevolgd door de reeks tekens voor verschillende soorten gegevens.

Kortom, het vertelt ons welk type gegevens we moeten opslaan en welke we moeten afdrukken. Formaatspecificaties worden voornamelijk gebruikt bij de functies scanf() en printf().



Als we bijvoorbeeld een geheel getal willen lezen en afdrukken met scanf() en printf() functies wordt %i of %d gebruikt, maar er is een subtiel verschil tussen beide %i En %D formaatspecificatie .

%d specificeert een decimaal geheel getal met teken, terwijl %i een geheel getal met verschillende grondtallen specificeert.

‘%d’ en ‘%i’ gedragen zich op dezelfde manier met printf()

Er is geen verschil tussen de %i en %d formaatspecificaties bij gebruik met printf.



Beschouw het volgende voorbeeld.

C






tcp versus udp

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

>

>

Uitvoer

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

%d en %i gedrag is anders met scanf()

%d gaat uit van basis 10, terwijl %i de basis automatisch detecteert.

Daarom gedragen beide specificeerders zich anders wanneer ze worden gebruikt met een invoerfunctie. De waarde van 012 zou dus 10 zijn met %i, maar 12 met %d.

    %d neemt een geheel getal als een decimaal geheel getal met teken, d.w.z. het neemt negatieve waarden samen met positieve waarden, maar de waarden moeten in decimalen zijn, anders wordt er een waarde van afval afgedrukt.
    ( Opmerking : Als de invoer het octale formaat heeft, zoals 012, negeert %d 0 en neemt de invoer als 12).
    %i neemt een geheel getal als een geheel getal met een decimaal, hexadecimaal of octaal type.
    Als u een waarde in hexadecimaal formaat wilt invoeren, moet de waarde worden opgegeven door 0x vooraf te gaan. Als u een waarde in octaal formaat wilt invoeren, moet de waarde vóór 0 worden opgegeven.

Beschouw het volgende voorbeeld.

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

>

>

Uitvoer

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>

Uitleg

  • De decimale waarde van a als 12 is 12
  • De decimale waarde van b als 12 (octaal) is 10
  • De decimale waarde van c als 12 (hexadecimaal) is 18