Pola specyfikacji formatu: scanf
i wscanf
funkcje
Informacje te dotyczą całej scanf
rodziny funkcji, w tym bezpiecznych wersji. Opisuje on symbole używane do określania scanf
sposobu analizowania strumienia wejściowego, takiego jak strumień stdin
wejściowy , do wartości wstawionych do zmiennych programu.
Argument format
jest ciągiem określającym interpretację danych wejściowych i może zawierać co najmniej jeden z następujących elementów:
Znaki odstępu: puste (
\t
) lub nowy wiersz (\n
). Znak odstępu powodujescanf
odczytywanie, ale nie przechowywanie, wszystkie kolejne znaki odstępu w danych wejściowych do następnego znaku innego niż biały znak. Jeden znak odstępu w formacie jest zgodny z dowolną liczbą (w tym 0) i kombinacją znaków odstępu w danych wejściowych.Znaki inne niż odstępy, z wyjątkiem znaku procentu (
%
). Znak inny niż biały powodujescanf
odczytywanie, ale nie przechowywanie pasującego znaku odstępu. Jeśli następny znak w strumieniu wejściowym nie jest zgodny,scanf
kończy działanie.Specyfikacje formatu wprowadzone przez znak procentu (
%
). Specyfikacja formatu powodujescanf
odczytywanie i konwertowanie znaków w danych wejściowych na wartość określonego typu. Wartość jest przypisywana do argumentu na liście argumentów.Specyfikacja formatu ma następującą postać:
%
[*
][][width
{h
ll
||L
l
|I64
|}]type
Tutaj,
width
, ,h
,ll
l
,I64
, iL
reprezentują specyfikacjęscanf
szerokości itype
reprezentujescanf
znak pola typu.
Ciąg argumentu format
jest odczytywany od lewej do prawej. Oczekuje się, że znaki poza specyfikacjami formatu będą zgodne z sekwencją znaków w strumieniu wejściowym. Pasujące znaki w strumieniu wejściowym są skanowane, ale nie są przechowywane. Jeśli znak w strumieniu wejściowym powoduje konflikt ze specyfikacją formatu, scanf
kończy działanie, a znak pozostaje w strumieniu wejściowym tak, jakby nie został odczytany.
Po napotkaniu pierwszej specyfikacji formatu wartość pierwszego pola wejściowego jest konwertowana zgodnie z tą specyfikacją. Ta wartość jest przechowywana w lokalizacji określonej przez pierwszy argument, który jest zgodny z argumentem format
. Druga specyfikacja formatu powoduje przekonwertowanie drugiego pola wejściowego i zapisanie go w następnym argumencie itd. przez koniec ciągu formatu.
Pole wejściowe jest definiowane jako: Wszystkie znaki do pierwszego znaku odstępu (spacja, karta lub nowy wiersz) albo do pierwszego znaku, którego nie można przekonwertować zgodnie ze specyfikacją formatu, lub dopóki szerokość pola (jeśli określono) nie zostanie osiągnięta. Jeśli dla danej specyfikacji istnieje zbyt wiele argumentów, dodatkowe argumenty są oceniane, ale ignorowane. Wyniki są nieprzewidywalne, jeśli nie ma wystarczającej liczby argumentów dla specyfikacji formatu.
Każde pole specyfikacji formatu jest pojedynczym znakiem lub liczbą oznaczającą określony format. Znak type
, który pojawia się po ostatnim opcjonalnym polu formatu, określa, czy pole wejściowe jest interpretowane jako znak, ciąg lub liczba.
Najprostsza specyfikacja formatu zawiera tylko znak procentu type
i znak (na przykład %s
). Jeśli znak procentu (%
) następuje znak, który nie ma znaczenia jako znak kontrolki formatu, ten znak i następujące znaki (do następnego znaku procentu) są traktowane jako zwykła sekwencja znaków. Oznacza to, że są traktowane jako sekwencja znaków, które muszą być zgodne z danymi wejściowymi. Aby na przykład określić, że znak procentu ma być wejściowy, użyj polecenia %%
.
Gwiazdka (*
) po znaku procentu pomija przypisanie następnego pola wejściowego, które jest interpretowane jako pole określonego typu. Pole jest skanowane, ale nie jest przechowywane w argumencie.
Bezpieczne wersje (te z _s
sufiksem) scanf
rodziny funkcji wymagają każdego parametru typu c
, C
, s
S
lub[
, aby parametr rozmiaru buforu został przekazany natychmiast po. Aby uzyskać więcej informacji na temat bezpiecznych wersji scanf
rodziny funkcji, zobaczscanf_s
, _scanf_s_l
, wscanf_s
, _wscanf_s_l
.
Zobacz też
scanf
Specyfikacja szerokości
scanf
Wpisz znaki pola
scanf
, , _scanf_l
, , wscanf
_wscanf_l
scanf_s
, , _scanf_s_l
, , wscanf_s
_wscanf_s_l