logo

Differenza tra l'identificatore di formato %d e %i nel linguaggio C

Uno specificatore di formato è un carattere speciale o una sequenza di caratteri utilizzata per definire il tipo di dati da stampare sullo schermo o il tipo di dati da scansionare dall'input standard. Un identificatore di formato inizia con un carattere '%' seguito dalla sequenza di caratteri per diversi tipi di dati.

In breve, ci dice quale tipo di dati archiviare e quali stampare. Gli identificatori di formato vengono utilizzati principalmente con le funzioni scanf() e printf().



Ad esempio, se vogliamo leggere e stampare un numero intero utilizzando scanf() e printf(), viene utilizzato %i o %d ma c'è una sottile differenza in entrambi %io E %D identificatore di formato .

%d specifica l'intero decimale con segno mentre %i specifica l'intero di varie basi.

algoritmo Mergesort

'%d' e '%i' si comportano in modo simile con printf()

Non c'è differenza tra gli identificatori di formato %i e %d quando utilizzati con printf.



Considera il seguente esempio.

C






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

>

>

Produzione

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

Il comportamento di %d e %i è diverso con scanf()

%d presuppone la base 10 mentre %i rileva automaticamente la base.

educazione shloka mehta

Pertanto, entrambi gli specificatori si comportano diversamente quando vengono utilizzati con una funzione di input. Quindi, il valore di 012 sarebbe 10 con %i ma 12 con %d.

    %d accetta un valore intero come intero decimale con segno, ovvero accetta valori negativi insieme a valori positivi ma i valori dovrebbero essere in decimale altrimenti stamperà un valore spazzatura.
    ( Nota : Se l'input è nel formato ottale come 012, %d ignorerà 0 e prenderà l'input come 12).
    %i accetta un valore intero come valore intero con tipo decimale, esadecimale o ottale.
    Per immettere un valore in formato esadecimale, il valore deve essere fornito precedendo 0x mentre per immettere un valore in valore in formato ottale, il valore deve essere fornito precedendo 0.

Considera il seguente esempio.

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

len di stringa in Java

>

>

Produzione

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>

Spiegazione

  • Il valore decimale di a come 12 è 12
  • Il valore decimale di b come 12(ottale) è 10
  • Il valore decimale di c come 12 (esadecimale) è 18