Sdílet prostřednictvím


Specifikace šířky scanf

Tyto informace platí pro výklad formátovacího řetězce v scanf řady funkcí, včetně zabezpečené verze jako scanf_s.Tyto funkce obvykle použijeme že vstupní datový proud je rozdělen do posloupnosti tokenů.Tokeny jsou odděleny prázdné místo (místa, kartu nebo nový řádek) nebo v případě číselných typů, přírodní konce číselný datový typ podle prvního znaku, který nelze převést na číselnou text.Šířka specifikace však lze způsobit analýza vstupu pro zastavení přirozeného konce token.

Šířka specifikace obsahuje znaky mezi % a pole specifikátor typu, které mohou být kladné celé číslo jen Šířka 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ředpona velikosti.

Šířka pole

Šířka kladné desítkové celé číslo řízení maximální počet znaků ke čtení pro toto pole je pole.Více než Šířka znaky jsou převedeny a uloženy na odpovídající argument.Méně než Šířka znaky mohou být číst, pokud prázdný znak (místo, kartu nebo nový řádek) nebo znak, který nelze převést podle daného formátu dojde před Šířka je dosaženo.

Šířka specifikace je samostatná a oddělená od bezpečné verze těchto funkcí vyžaduje argument velikost vyrovnávací paměti (tj, scanf_s, wscanf_s, atd.). V následujícím příkladu je specifikace šířka 20, označující, že až 20 znaků je nutno číst ze vstupního datového proudu.Velikost vyrovnávací paměti je 21, která zahrnuje prostor pro možné 20 znaků plus null zakončení:

char str[21];
scanf_s("%20s", str, 21);

Pokud Šířka pole se nepoužívá, scanf_s se pokusí přečíst celý token do řetězce.Pokud není dostatečně velký pro celý token zadaná velikost, nic zapíše řetězec cílové.Pokud Šířka je pole určeno, pak první Šířka znaky v tokenu, budou zapsány do cílového řetězce spolu s ukončení hodnotu null.

Předpona velikosti

Volitelné předpony h, l, vše, I64, a L označuje velikost argument (dlouhé nebo krátké, jednobajtových znaků nebo širokého znaku, v závislosti na typ znak, který je změnit).Tyto specifikace formátu znaků jsou použity znaky typu v scanf nebo wscanf funkce k určení výklad argumenty, jak je znázorněno v následující tabulce.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 Znaky pole typu scanf.

[!POZNÁMKA]

h, l, a L prefixy jsou rozšíření Microsoft při použití datového typu char.

Velikost předpony pro scanf a specifikátory formátu wscanf

Upřesnit

Použít předponu

Se specifikátorem typu

double

l

e, E, f, g, or G

Dlouhá dvojitá (stejné jako dvojité)

L

e, E, f, g, or G

Long int

l

d, i, o, x, or X

dlouho unsigned int

l

u

long long

LL

d, i, o, x, or X

short int

h

d, i, o, x, or X

krátké unsigned 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

Řetězec širokého znakuscanf

l

s or S

Řetězec širokého znakuwscanf

l

s or S

Následující příklady používají h a l s scanf_s funkce a wscanf_s funkce:

scanf_s( "%ls", &x, 2 );     // Read a wide-character string
wscanf_s( "%hC",&x, 2 );    // Read a single-byte character

Používáte-li nezabezpečené funkce v scanf rodiny, vynecháte parametr size označuje velikost vyrovnávací paměti z předchozích argumentů.

Čtení Undelimited řetězce.

Číst řetězce nejsou odděleny prázdné znaky, sada znaků v hranatých závorkách ([]) může být nahrazeno s znak typu (řetězec).Sadu znaků v závorkách jsou označovány jako řídicí řetězec.Odpovídající vstupní pole je zobrazeno na první znak, který není uveden v řetězci ovládacího prvku.Pokud je první znak v sadě stříška (^), obrácený efekt: vstupní pole je zobrazeno první znak, který se zobrazí ve zbytku znakové sady.

Všimněte si, že % [-z a % [z- , jsou považovány za rovnocenné %[abcde...z.To je společný scanf rozšíření funkce, ale Všimněte si, že ANSI standard nevyžaduje.

Neukončený čtení řetězců

Pro uložení řetězce bez ukládání ukončující znak null ('\0'), použijte specifikace %nc kde n je desítkové celé číslo.V tomto případě c znak typu označuje, že tento argument je ukazatel na pole znaků.Další n znaky se čtou vstupního datového proudu do zadaného umístění a je připojen žádný znak null ('\0').Pokud n není zadán, výchozí hodnota je 1.

Kdy se zastaví čtení pole scanf

scanf Funkce prohledává jednotlivé vstupní pole znak po znaku.Přestat, čtení konkrétní vstupní pole před dosažením mezeru pro z různých důvodů:

  • Zadaná šířka bylo dosaženo.

  • Nelze převést na další znak jak je uvedeno.

  • Další konflikty znak znakem v řetězci ovládací prvek, který by měl odpovídat.

  • Další znak nedostaví k určité znakové sady.

Z jakéhokoli důvodu když scanf funkce ukončí čtení vstupního pole, další vstupní pole se považuje za začne na první znak nepřečtené.Konfliktní povahy, pokud existuje, je považována za nepřečtenou a je první znak další vstupní pole nebo první znak v následné operace čtení na vstupní datový proud.

Viz také

Referenční dokumentace

scanf, _scanf_l, wscanf, _wscanf_l

scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l

Pole specifikace formátu: funkce scanf a wscanf

Znaky pole typu scanf