Udostępnij za pośrednictwem


scanf znaki pola typu

Poniższe informacje dotyczą dowolnej scanf rodziny funkcji, w tym bezpiecznych wersji, takich jak scanf_s.

Znak type jest jedynym wymaganym polem formatu; pojawia się po dowolnych opcjonalnych polach formatu. Znak type określa, czy skojarzony argument jest interpretowany jako znak, ciąg lub liczba.

type Znaki dla scanf funkcji

Znak Oczekiwany typ danych wejściowych Typ argumentu Argument rozmiaru w bezpiecznej wersji?
c Znak. W przypadku użycia z funkcjami scanf określa znak jednobajtowy; w przypadku użycia z funkcjami wscanf określa szeroki znak. Znaki odstępu, które są zwykle pomijane, są odczytywane po c określeniu. W przeciwieństwie do innych pól typów specyfikator szerokości pola wskazuje dokładną liczbę znaków, a nie maksymalną. Aby odczytać następny znak bez odstępu jednobajtowego, użyj polecenia %1s; aby odczytać znak o szerokości innej niż biały, użyj polecenia %1ws. Wskaźnik do char użycia z funkcjami scanf , wskaźnik do wchar_t użycia z funkcjami wscanf . Wymagany. Rozmiar nie zawiera miejsca dla terminatora o wartości null.
C Przeciwny znak rozmiaru. W przypadku użycia z funkcjami scanf określa szeroki znak; w przypadku użycia z funkcjami wscanf określa znak jednobajtowy. Znaki odstępu, które są zwykle pomijane, są odczytywane po C określeniu. W przeciwieństwie do innych pól typów specyfikator szerokości pola wskazuje dokładną liczbę znaków, a nie maksymalną. Aby odczytać następny znak bez odstępu jednobajtowego, użyj polecenia %1s; aby odczytać znak o szerokości innej niż biały, użyj polecenia %1ws. Wskaźnik do wchar_t użycia z funkcjami scanf , wskaźnik do char użycia z funkcjami wscanf . Wymagany. Argument rozmiaru nie zawiera miejsca dla terminatora o wartości null.
d Liczba całkowita dziesiętna. Wskaźnik na int. L.p.
i Całkowitą. Szesnastkowy, jeśli ciąg wejściowy zaczyna się od "0x" lub "0X", ósemkowy, jeśli ciąg zaczyna się od "0", w przeciwnym razie dziesiętny. Wskaźnik na int. L.p.
o Liczba całkowita ósemkowa. Wskaźnik na int. L.p.
p Adres wskaźnika w cyfrach szesnastkowej. Maksymalna liczba odczytanych cyfr zależy od rozmiaru wskaźnika (32 bity lub 64 bity), który zależy od architektury komputera. "0x" lub "0X" są akceptowane jako prefiksy. Wskaźnik na void*. L.p.
u Liczba całkowita bez znaku dziesiętnego. Wskaźnik na unsigned int. L.p.
x Liczba całkowita szesnastkowa. Wskaźnik na int. L.p.
e, , E, f, F, , gG Wartość zmiennoprzecinkowa składająca się z opcjonalnego znaku (+ lub -), serii co najmniej jednej cyfry dziesiętnej zawierającej punkt dziesiętny i opcjonalny wykładnik ("e" lub "E"), po którym następuje opcjonalna podpisana wartość całkowita. Wskaźnik na float. L.p.
a, A Wartość zmiennoprzecinkowa składająca się z serii co najmniej jednej cyfry szesnastkowej zawierającej opcjonalny punkt dziesiętny oraz wykładnik ("p" lub "P"), po którym następuje wartość dziesiętna. Wskaźnik na float. L.p.
n Brak danych wejściowych odczytanych ze strumienia lub buforu. Wskaźnik do int, do którego jest przechowywana liczba znaków pomyślnie odczytanych ze strumienia lub buforu do tego punktu w bieżącym wywołaniu scanf funkcji lub wscanf funkcji. L.p.
s Ciąg, maksymalnie pierwszy znak odstępu (spacja, karta lub nowy wiersz). Aby odczytać ciągi, które nie są rozdzielane znakami spacji, użyj zestawu nawiasów kwadratowych ([ ]), zgodnie z opisem w scanf specyfikacji szerokości. W przypadku użycia z funkcjami scanf oznacza tablicę znaków jednobajtowych; w przypadku użycia z funkcjami wscanf oznacza tablicę znaków o szerokim znaku. W obu przypadkach tablica znaków musi być wystarczająco duża, aby pole wejściowe oraz znak null zakończenia, który jest automatycznie dołączany. Wymagany. Rozmiar zawiera miejsce dla terminatora o wartości null.
S Ciąg znaków o przeciwległym rozmiarze, maksymalnie pierwszy znak odstępu (spacja, karta lub nowy wiersz). Aby odczytać ciągi, które nie są rozdzielane znakami spacji, użyj zestawu nawiasów kwadratowych ([ ]), zgodnie z opisem w scanf specyfikacji szerokości. W przypadku użycia z funkcjami scanf oznacza tablicę szerokoznakową; w przypadku użycia z funkcjami wscanf oznacza tablicę znaków jednobajtowych. W obu przypadkach tablica znaków musi być wystarczająco duża, aby pole wejściowe oraz znak null zakończenia, który jest automatycznie dołączany. Wymagany. Rozmiar zawiera miejsce dla terminatora o wartości null.

Argumenty rozmiaru, jeśli to konieczne, powinny być przekazywane na liście parametrów bezpośrednio po argument, do którego mają zastosowanie. Na przykład następujący kod:

char string1[11], string2[9];
scanf_s("%10s %8s", string1, 11, string2, 9);

odczytuje ciąg o maksymalnej długości od 10 do string1, a ciąg o maksymalnej długości 8 do string2. Rozmiary buforu powinny być co najmniej jedno więcej niż specyfikacje szerokości, ponieważ miejsce musi być zarezerwowane dla terminatora o wartości null.

Ciąg formatu może obsługiwać dane wejściowe z pojedynczym bajtem lub szerokim znakiem niezależnie od tego, czy jest używany znak jednobajtowy, czy wersja szerokoznakowa funkcji. W związku z tym, aby odczytywać znaki jednobajtowe lub szerokie z funkcjami scanf i wscanf funkcjami, użyj specyfikatorów formatu w następujący sposób.

Aby odczytać znak jako Użyj tej funkcji Za pomocą tych specyfikatorów formatu
jednobajtowe scanf, funkcje c, hc lub hC
jednobajtowe wscanf, funkcje C, hc lub hC
szerokie wscanf, funkcje c, lc lub lC
szerokie scanf, funkcje C, lc lub lC

Aby skanować ciągi za pomocą scanf funkcji i wscanf funkcji, użyj powyższej tabeli z specyfikatorami s typów formatu i S zamiast c i C.

Zobacz też

scanf, , _scanf_l, , wscanf_wscanf_l