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