logo

Rozdíl mezi specifikátorem formátu %d a %i v jazyce C

Specifikátor formátu je speciální znak nebo posloupnost znaků používaná k definování typu dat, která se mají vytisknout na obrazovku, nebo typu dat, která mají být naskenována ze standardního vstupu. Specifikátor formátu začíná znakem „%“, za kterým následuje sekvence znaků pro různé typy dat.

Stručně řečeno, říká nám, jaký typ dat ukládat a který tisknout. Specifikátory formátu se primárně používají s funkcemi scanf() a printf().



Například, pokud chceme číst a tisknout celé číslo pomocí scanf() a printf() se používá buď %i nebo %d, ale v obou je nepatrný rozdíl %i a %d specifikátor formátu .

%d určuje celé číslo v desítkové soustavě se znaménkem, zatímco %i určuje celé číslo na různých základech.

„%d“ a „%i“ se chovají podobně s printf()

Při použití s ​​printf není žádný rozdíl mezi specifikátory formátu %i a %d.



Zvažte následující příklad.

C






strojopis pro každého
// 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;> }>

>

>

Výstup

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

Chování %d a %i se u scanf() liší

%d předpokládá základnu 10, zatímco %i auto detekuje základnu.

Proto se oba specifikátory chovají odlišně, když jsou použity se vstupní funkcí. Hodnota 012 by tedy byla 10 s %i, ale 12 s %d.

    %d bere celočíselnou hodnotu jako dekadické celé číslo se znaménkem, tj. přijímá záporné hodnoty spolu s kladnými hodnotami, ale hodnoty by měly být v desítkové soustavě, jinak vypíše nesmyslnou hodnotu.
    ( Poznámka : Pokud je vstup v osmičkovém formátu jako 012, pak %d bude ignorovat 0 a bude brát vstup jako 12).
    %i bere celočíselnou hodnotu jako celočíselnou hodnotu s desítkovým, šestnáctkovým nebo osmičkovým typem.
    Chcete-li zadat hodnotu v hexadecimálním formátu, měla by být hodnota uvedena před 0x a pro zadání hodnoty v osmičkovém formátu by hodnota měla být uvedena před 0.

Zvažte následující příklad.

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

>

>

Výstup

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>

Vysvětlení

  • Desetinná hodnota a jako 12 je 12
  • Desetinná hodnota b jako 12 (osmičková) je 10
  • Desetinná hodnota c jako 12 (hexadecimálně) je 18