Šířka specifikace scanf
Tyto informace se týkají výkladu řetězce formátu v scanf řady funkcí, včetně zabezpečené verze jako scanf_s.Tyto funkce se obvykle předpokládá, že vstupní proud je rozdělen do sekvence tokenů.Tokeny jsou odděleny prázdné znaky (mezery, kartu nebo nový řádek) nebo v případě číselné typy přírodních konce číselný datový typ, podle prvního znaku, který nelze převést na text číselné.Specifikace šířka však lze způsobit analýze vstupní zastavení přírodní konce token.
Šířku specifikace obsahuje znaky mezi % a specifikátor typu pole, která může zahrnovat celé kladné číslo, nazývá šířku pole a jeden nebo více znaků určující velikost pole, které mohou být považovány také modifikátory typu pole, například údaj o tom, zda je typ integer krátké nebo dlouhé.Tyto znaky jsou označovány jako předponu velikost.
Šířka pole
Šířka kladné desítkové celé řízení maximální počet znaků ke čtení pro toto pole je pole.Více než šířky znaky jsou převedeny a uloženy na odpovídající argument.Méně než šířky znaky mohou být číst, pokud prázdný znak (místo kartu nebo nového řádku) nebo znak, který nelze převést na základě daného formátu dojde před šířky je dosaženo.
Šířka specifikace je samostatná a oddělená od argument velikost vyrovnávací paměti vyžadované zabezpečené verze těchto funkcí (tj, scanf_s, wscanf_satd.).V následujícím příkladu je specifikace šířka 20, označující, že až 20 znaků jsou čtení ze vstupního datového proudu.Délka vyrovnávací paměti je 21, včetně prostor pro možné 20 znaků plus ukončovací znak null:
char str[21];
scanf_s("%20s", str, 21);
Pokud šířku pole se nepoužívá, scanf_s se pokusí přečíst celý token do řetězce.Pokud zadaná velikost není dostatečně velká pro uložení celého token, nic bude zapsán do cílového řetězec.Pokud šířku pole zadáno, pak první šířku řetězec cílové spolu s ukončovací znak null budou zapsány znaky v tokenu.
Velikost předpona
Volitelné předpony h, l, ll, I64, a l označuje velikost argument (dlouhé nebo krátké, jednobajtových znaků nebo znaků, v závislosti na typu znak, který mohou změnit).Tyto specifikace formátu znaky se používají s typ znaků v scanf nebo wscanf podle následující tabulky určete výklad argumenty funkce.Zadejte předponu I64 je rozšíření Microsoft a není ANSI kompatibilní.Typ znaků a jejich význam jsou popsány v tabulce "Zadejte znaky pro funkce scanf" v scanf znaky pole Typ.
[!POZNÁMKA]
h, l, a l prefixy jsou rozšíření Microsoft při použití dat typu char.
Velikost předpony pro scanf a wscanf specifikátory typ formátu
Položka: |
Použít prefix |
S specifikátor typu |
---|---|---|
double |
l |
e, E, f, g, or G |
dvojité (stejné jako dvojité) |
L |
e, E, f, g, or G |
Long int |
l |
d, i, o, x, or X |
dlouhé nepodepsané int |
l |
u |
dlouhé dlouhé |
LL |
d, i, o, x, or X |
short int |
h |
d, i, o, x, or X |
krátké nepodepsané int |
h |
u |
__int64 |
I64 |
d, i, o, u, x, or X |
Jednobajtové znakové sscanf |
h |
c or C |
Jednobajtové znakové swscanf |
h |
c or C |
Široký znak sscanf |
l |
c or C |
Široký znak swscanf |
l |
c, or C |
Jednobajtové – znakový řetězec sscanf |
h |
s or S |
Jednobajtové – znakový řetězec swscanf |
h |
s or S |
Wide znakový řetězec sscanf |
l |
s or S |
Wide znakový řetězec swscanf |
l |
s or S |
Následující příklady používají h a l s scanf_s funkce a wscanf_s funkcí:
scanf_s( "%ls", &x, 2 ); // Read a wide-character string
wscanf_s( "%hC",&x, 2 ); // Read a single-byte character
Pokud pomocí nezabezpečené funkce v scanf rodiny, délka vyrovnávací paměti předchozí argument určující parametr velikosti.
Čtení Undelimited řetězců
Čtení nejsou odděleny prázdné řetězce znaků, sada znaků v závorkách ([]) může být nahrazeno s typ znak (řetězec).Sada znaků v závorkách se označuje jako řetězec ovládacího prvku.Odpovídající vstupní pole je číst prvního znaku, který řetězec ovládací prvek nezobrazí.Pokud je první znak v sadě stříška (^), je efekt obrácené: vstupní pole je číst na první znak, který se ve zbytku znakové sady.
Všimněte si, že % [a-z a % [z-a , jsou považovány za rovnocenné %[abcde...z.Toto je společné scanf rozšíření funkce, ale Poznámka, že ANSI standard nevyžaduje ji.
Neukončený čtení řetězce
Chcete-li řetězec bez ukládání ukončujícím znakem null (\0), použijte specifikace %nc kde n je desítkové celé číslo.V tomto případě c znak typu označuje, že argument ukazatel do pole znaků.Další n znaky jsou čtení vstupní proud do zadaného umístění a je připojen žádný znak null (\0).Pokud n není zadán, výchozí hodnota je 1.
Při zastavení čtení pole scanf
scanf Funkce zkontroluje každý vstupní pole znak po znaku.Přestat čtení určitého vstupní pole před dosažením mezeru z různých důvodů:
Zadaná šířka bylo dosaženo.
Nelze převést na další znak určené.
Další konflikty znak znakem v řetězci ovládací prvek, který by mělo odpovídat.
Další znak nedostaví dané znakové sady.
Z jakéhokoli důvodu při scanf funkce přestane čtení vstupní pole, další vstupní pole se považuje za zahájení prvního znaku nepřečtené.Konfliktní znak, pokud existuje, je považována za nepřečtenou a je první znak další vstupní pole nebo první znak v následných operací čtení ve vstupním datovém proudu.
Viz také
Referenční dokumentace
scanf, _scanf_l, wscanf, _wscanf_l
scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l