Sdílet prostřednictvím


Pole specifikace formátu: scanf a wscanf funkce

Zde uvedené informace platí pro celou scanf řadu funkcí, včetně zabezpečených verzí. Popisuje symboly používané k tomu, aby funkcím scanf řekly, jak analyzovat vstupní datový proud, například vstupní datový proud stdin, do hodnot, které jsou vloženy do proměnných programu.

Argument format je řetězec, který určuje interpretaci vstupu a může obsahovat jednu nebo více z těchto hodnot:

  • Prázdné znaky: prázdné ( ); tabulátor (\t) nebo nový řádek (\n). Prázdný znak způsobí scanf čtení, ale ne uložení všech po sobě jdoucích prázdných znaků ve vstupu až do dalšího prázdného znaku. Jeden prázdný znak ve formátu odpovídá libovolnému číslu (včetně 0) a kombinaci prázdných znaků ve vstupu.

  • Neprázdné znaky s výjimkou znaku procenta (%). Neprázdný znak způsobí scanf čtení, ale ne uložení odpovídajícího neprázdného znaku. Pokud se další znak ve vstupním streamu neshoduje, scanf ukončí se.

  • Specifikace formátu zavedené znakem procenta (%). Specifikace formátu způsobí scanf čtení a převod znaků ve vstupu na hodnotu zadaného typu. Hodnota je přiřazena argumentu v seznamu argumentů.

    Specifikace formátu má následující tvar:

    %[*][][width{hll||Ll|I64|}]type

    Zde, width, , lh, ll, I64a L představují scanf specifikaci šířky a type představuje scanf typ pole znak.

Řetězec argumentu format se čte zleva doprava. Očekává se, že specifikace znaků mimo formát odpovídají sekvenci znaků ve vstupním datovém proudu. Odpovídající znaky ve vstupním datovém proudu se prohledávají, ale neukládají se. Pokud je znak ve vstupním datovém proudu v konfliktu se specifikací formátu, scanf ukončí se a znak zůstane ve vstupním streamu, jako by nebyl přečten.

Při výskytu první specifikace formátu se hodnota prvního vstupního pole převede podle této specifikace. Tato hodnota je uložena v umístění určeném prvním argumentem, který následuje za argumentem format . Druhá specifikace formátu způsobí, že druhé vstupní pole se převede a uloží v dalším argumentu atd. až na konec řetězce formátu.

Vstupní pole je definováno takto: Všechny znaky až do prvního prázdného znaku (mezera, tabulátor nebo nový řádek) nebo až do prvního znaku, který nelze převést podle specifikace formátu nebo dokud nedosáhne šířky pole (pokud je zadáno). Pokud pro dané specifikace existuje příliš mnoho argumentů, jsou extra argumenty vyhodnoceny, ale ignorovány. Výsledky jsou nepředvídatelné, pokud pro specifikaci formátu není dostatek argumentů.

Každé pole specifikace formátu je jeden znak nebo číslo, které označuje konkrétní možnost formátu. Znak type , který se zobrazí za posledním volitelným polem formátu, určuje, zda je vstupní pole interpretováno jako znak, řetězec nebo číslo.

Nejjednodušší specifikace formátu obsahuje pouze znak procenta a type znak (například %s). Pokud znak procenta (%) následuje znak, který nemá žádný význam jako znak ovládacího prvku formátu, tento znak a následující znaky (až do dalšího znaku procenta) se považují za běžnou posloupnost znaků. To znamená, že jsou považovány za posloupnost znaků, které musí odpovídat vstupu. Chcete-li například určit, že znak procenta má být vstupní, použijte %%.

Hvězdička (*) následující po znaku procenta potlačí přiřazení dalšího vstupního pole, které je interpretováno jako pole zadaného typu. Pole se prohledá, ale neuloží do argumentu.

Zabezpečené verze (ty s _s příponou) scanf řady funkcí vyžadují každý parametr typu c, C, nebo sS [ mít parametr velikosti vyrovnávací paměti předaný okamžitě za sebou. Další informace ozabezpečenýchch scanf scanf_s_scanf_s_lwscanf_s_wscanf_s_l

Viz také

scanf Specifikace šířky
scanf Znaky pole typu
scanf, _scanf_l, , wscanf_wscanf_l
scanf_s, _scanf_s_l, , wscanf_s_wscanf_s_l