scanf Specyfikacja szerokość
Te informacje dotyczą interpretacji ciągi formatów w scanf rodziny funkcji, w tym bezpiecznej wersji, takie jak scanf_s.Te funkcje zwykle Załóżmy, że strumień wejściowy jest podzielony na sekwencji tokenów.Tokeny są rozdzielone przez odstępy (miejsca, tab lub nowego wiersza) lub w przypadku typów numerycznych, naturalne końca typ danych numerycznych, wskazywane przez pierwszy znak, że nie można przekonwertować na tekst liczbowe.Jednak specyfikacji szerokość można spowodować, że podczas analizowania danych wejściowych, aby zatrzymać przed zakończeniem naturalnych tokenu.
Szerokość specyfikacji składa się ze znaków, między % i specyfikatora pole typu, które mogą obejmować dodatnią liczbą całkowitą, nazywane Szerokość pól i jeden lub więcej znaków, wskazująca rozmiar pola, które mogą być również uwzględnione jako modyfikatory typu pola, takie jak wskazanie, czy jest typu Liczba całkowita krótki lub long.Znaki te są nazywane prefiks rozmiar.
Pole szerokość
Szerokość pole jest całkowitą liczbą dodatnią dziesiętne kontrolowanie maksymalna liczba znaków do odczytu dla tego pola.Nie więcej niż Szerokość znaki są konwertowane i przechowywane w odpowiadających im argument.Mniej niż Szerokość znaków może być odczytu, jeśli odstępy (miejsca, tab lub nowego wiersza) lub znak, który nie może być konwertowane zgodnie z danego formatu występuje przed Szerokość zostanie osiągnięty.
Specyfikacja szerokość jest odrębne i niezależne od argument rozmiar buforu wymagany przez bezpieczne wersje tych funkcji (tzn., scanf_s, wscanf_s, itp.).W poniższym przykładzie specyfikacji szerokość wynosi 20, wskazując, że maksymalnie 20 znaków mają być odczytywane ze strumienia wejściowego.Długość buforu jest 21, który zawiera miejsca na możliwe 20 znaków plus null terminator:
char str[21];
scanf_s("%20s", str, 21);
Jeśli Szerokość pole nie jest używane, scanf_s spróbuje odczytać całe token w ciągu znaków.Jeśli określony rozmiar nie jest wystarczająco duży, aby pomieścić cały token, nic nie zostaną zapisane na ciąg docelowego.Jeśli Szerokość pole jest określony, następnie pierwszy Szerokość znaków w tokenie będą zapisywane do ciągu miejsca przeznaczenia wraz z null terminator.
Prefiks rozmiar
Opcjonalne prefiksy h, l, ll, jest nieobsługiwana, i l wskazuje rozmiar argument (długiej lub krótkiej, znaków jednobajtowych lub szerokich znaków, w zależności od znaku typu, który oni modyfikować).Te znaki specyfikacja formatu są używane z wpisywanych znaków w scanf lub wscanf funkcji, aby określić interpretacji argumenty, jak pokazano w poniższej tabeli.Prefiks typu jest nieobsługiwana jest rozszerzenie Microsoft i nie jest ANSI zgodny.Wpisz znaki i ich znaczeń są opisane w tabeli "Wpisz znaki w funkcji scanf" w scanf znaki pola typu.
[!UWAGA]
h, l, i l prefiksy są rozszerzenia Microsoft, gdy używana z danymi typu char.
Rozmiar prefiksów dla scanf i wscanf Specyfikatory typ formatu
Aby określić |
Użyj prefiksu |
Z specyfikatora typu |
---|---|---|
podwójne |
l |
e, E, f, g, or G |
podwójne długo (taki sam jak double) |
L |
e, E, f, g, or G |
long int |
l |
d, i, o, x, or X |
LONG unsigned int |
l |
u |
LONG long |
LL |
d, i, o, x, or X |
short int |
h |
d, i, o, x, or X |
krótkie unsigned int |
h |
u |
__int64 |
JEST NIEOBSŁUGIWANA |
d, i, o, u, x, or X |
Znaków jednobajtowych zscanf |
h |
c or C |
Znaków jednobajtowych zwscanf |
h |
c or C |
Szerokich znaków zscanf |
l |
c or C |
Szerokich znaków zwscanf |
l |
c, or C |
Jednobajtowe – ciąg znaków zscanf |
h |
s or S |
Jednobajtowe – ciąg znaków zwscanf |
h |
s or S |
Łańcuch szerokich znaków zscanf |
l |
s or S |
Łańcuch szerokich znaków zwscanf |
l |
s or S |
W następujących przykładach użyto h i l z scanf_s funkcje i wscanf_s funkcje:
scanf_s( "%ls", &x, 2 ); // Read a wide-character string
wscanf_s( "%hC",&x, 2 ); // Read a single-byte character
Jeśli funkcja niezabezpieczonych w scanf rodziny, pominąć parametr size, wskazując długość buforu poprzedni argument.
Undelimited czytania ciągi
Odczytać ciągi nie są rozdzielane przez odstępy znaków, zestaw znaków w nawiasach kwadratowych ([]) może być zastąpiona s (ciąg) typ znaków.Zestaw znaków w nawiasach jest określone jako ciąg kontroli.Odpowiednie pole wejściowe jest odczytu do pierwszego znaku, który pojawia się w ciągu kontroli.Jeśli pierwszy znak w zestawie jest znak daszka (^), efekt jest odwrotna: pole wejściowe jest odczytywany w do pierwszego znaku, który pojawia się w pozostałej części zestawu znaków.
Należy zauważyć, że % [a-z i % [z-a , są interpretowane jako równoważne z %[abcde...z.Jest to wspólne scanf rozszerzenia funkcji, ale Uwaga standardu ANSI jej nie wymagają.
Niezakończony czytania ciągi
Aby zapisać ciąg bez przechowywania kończącego znaku null (\0), należy użyć specyfikacji %nc gdzie n jest całkowitą liczbą dziesiętną.W tym przypadku c typ znaków wskazuje, że argument jest wskaźnik do tablicy znaków.Następnego n znaki są odczytywane ze strumienia wejściowego do określonej lokalizacji i jest dołączany żaden znak null (\0).Jeśli n nie jest określony, jego wartość domyślna to 1.
Kiedy scanf Zatrzymuje czytanie, pola
scanf Funkcji skanuje każde pole wejściowe, znak po znaku.Może przestać czytania określonego pola wejściowego, zanim dotrze on znak spacji różnych powodów:
Została osiągnięta określona szerokość.
Nie można przekonwertować następnego znaku jak określono.
Konflikty znak następny znak w ciągu formantu, który powinien odpowiadać.
Następny znak nie przestanie się pojawiać w zestawie danego znaku.
Niezależnie od powodu gdy scanf funkcji Zatrzymuje czytanie pole wejściowe, następne pole wejściowe uznaje się rozpoczynać się od pierwszego znaku nieprzeczytane.Znak powodujące konflikt, jeśli istnieje, jest traktowana jako nieprzeczytane i jest pierwszy znak następnego pola wejściowego lub pierwszego znaku w późniejszych operacji odczytu w strumieniu wejściowym.
Zobacz też
Informacje
scanf, _scanf_l, wscanf, _wscanf_l
scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l