Sdílet prostřednictvím


scanf Znaky pole typu

Následující informace platí pro libovolnou scanf řadu funkcí, včetně zabezpečených verzí, například scanf_s.

Znak je jediné pole požadovaného formátu. Zobrazí type se za libovolnými volitelnými poli formátu. Znak type určuje, zda je přidružený argument interpretován jako znak, řetězec nebo číslo.

type Znaky pro scanf funkce

Znak Byl očekáváný typ vstupu. Typ argumentu Argument velikosti v zabezpečené verzi?
c Znak. Při použití s funkcemi scanf určuje jednobajtů znak; při použití s funkcemi wscanf určuje široký znak. Prázdné znaky, které se obvykle přeskočí, se při zadání čtou c . Na rozdíl od jiných polí typu specifikátor šířky pole označuje přesný počet znaků, nikoli maximum. Pokud chcete přečíst další znak bez prázdného jednobajtů, použijte %1sznak ; ke čtení dalšího znaku, který není prázdný, použijte %1ws. Ukazatel na char při použití s funkcemi scanf , ukazatel na wchar_t při použití s funkcemi wscanf . Povinný: Velikost neobsahuje mezeru pro ukončovací znak null.
C Opačný znak velikosti. Při použití s funkcemi scanf určuje široký znak; při použití s funkcemi wscanf určuje jednobajtů znak. Prázdné znaky, které se obvykle přeskočí, se při zadání čtou C . Na rozdíl od jiných polí typu specifikátor šířky pole označuje přesný počet znaků, nikoli maximum. Pokud chcete přečíst další znak bez prázdného jednobajtů, použijte %1sznak ; ke čtení dalšího znaku, který není prázdný, použijte %1ws. Ukazatel na wchar_t při použití s funkcemi scanf , ukazatel na char při použití s funkcemi wscanf . Povinný: Argument velikosti neobsahuje mezeru pro ukončovací znak null.
d Desetinné celé číslo. Ukazatel na int. Ne.
i Celé číslo. Šestnáctkové, pokud vstupní řetězec začíná řetězcem "0x" nebo "0X", osmičkové, pokud řetězec začíná na "0", jinak desetinné číslo. Ukazatel na int. Ne.
o Osmičkové celé číslo. Ukazatel na int. Ne.
p Adresa ukazatele v šestnáctkových číslicích. Maximální počet přečtených číslic závisí na velikosti ukazatele (32 bitů nebo 64 bitů), který závisí na architektuře počítače. "0x" nebo "0X" jsou přijímány jako předpony. Ukazatel na void*. Ne.
u Celé číslo bez znaménka Ukazatel na unsigned int. Ne.
x Šestnáctkové celé číslo. Ukazatel na int. Ne.
e, E, f, F, g, G Hodnota s plovoucí desetinnou čárkou skládající se z volitelného znaménka (+ nebo -), řady jedné nebo více desetinných číslic obsahujících desetinnou čárku a volitelné exponenty ("e" nebo "E") následované nepovinnou celočíselnou hodnotou. Ukazatel na float. Ne.
a, A Hodnota s plovoucí desetinnou čárkou skládající se z jedné nebo více šestnáctkových číslic obsahujících volitelnou desetinnou čárku a exponent ("p" nebo "P") následovanou desetinnou hodnotou. Ukazatel na float. Ne.
n Ze streamu nebo vyrovnávací paměti se nečte žádný vstup. Ukazatel na int, do kterého je uložen počet znaků úspěšně načten z datového proudu nebo vyrovnávací paměti až do tohoto bodu v aktuálním volání scanf funkcí nebo wscanf funkcí. Ne.
s Řetězec, až první prázdný znak (mezera, tabulátor nebo nový řádek). Ke čtení řetězců, které nejsou oddělené znaky mezery, použijte sadu hranatých závorek ([ ]), jak je popsáno ve scanf specifikaci šířky. Při použití s funkcemi scanf označuje jednobajtů pole znaků; při použití s wscanf funkcemi označuje pole širokého znaku. V obou případech musí být pole znaků dostatečně velké pro vstupní pole a ukončující znak null, který se automaticky připojí. Povinný: Velikost zahrnuje mezeru pro ukončovací znak null.
S Řetězec znaků s opačnou velikostí až do prvního prázdného znaku (mezera, tabulátor nebo nový řádek). Ke čtení řetězců, které nejsou oddělené znaky mezery, použijte sadu hranatých závorek ([ ]), jak je popsáno ve scanf specifikaci šířky. Při použití s funkcemi scanf označuje pole širokého znaku; při použití s funkcemi wscanf označuje pole s jedním bajtem. V obou případech musí být pole znaků dostatečně velké pro vstupní pole a ukončující znak null, který se automaticky připojí. Povinný: Velikost zahrnuje mezeru pro ukončovací znak null.

V případě potřeby by měly být argumenty velikosti předány v seznamu parametrů bezprostředně za argumentem, na který se vztahují. Například následující kód:

char string1[11], string2[9];
scanf_s("%10s %8s", string1, 11, string2, 9);

přečte řetězec s maximální délkou 10 do string1a řetězec s maximální délkou 8 do string2. Velikosti vyrovnávací paměti by měly mít alespoň jednu více než specifikace šířky, protože mezera musí být vyhrazena pro ukončovací znak null.

Formátovací řetězec může zpracovávat jednobajtů nebo široký znakový vstup bez ohledu na to, zda se používá jednobajtů nebo verze širokého znaku funkce. Chcete-li tedy číst jednobajtů nebo široké znaky s funkcemi scanf a wscanf funkcemi, použijte specifikátory formátu následujícím způsobem.

Čtení znaku jako Použít tuto funkci S těmito specifikátory formátu
jeden bajt scanf – funkce c, hc nebo hC
jeden bajt wscanf – funkce C, hc nebo hC
široký wscanf – funkce c, lc nebo lC
široký scanf – funkce C, lc nebo lC

Pokud chcete skenovat řetězce s funkcemi scanf a wscanf funkcemi, použijte výše uvedenou tabulku se specifikátory s typu formátu a S místo c a C.

Viz také

scanf, _scanf_l, wscanf, _wscanf_l