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 , , g G |
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
.