scanf
, , _scanf_l
, , wscanf
_wscanf_l
Odczytuje sformatowane dane ze standardowego strumienia wejściowego. Dostępne są bezpieczniejsze wersje tych funkcji; zobacz scanf_s
, , wscanf_s
_scanf_s_l
, , _wscanf_s_l
.
Uwaga
W programie Visual Studio 2015 printf
rodzina funkcji i scanf
została zadeklarowana jako inline
i przeniesiona do <stdio.h>
nagłówków i <conio.h>
. W przypadku migrowania starszego kodu może zostać wyświetlony komunikat Błąd konsolidatora LNK2019 w połączeniu z tymi funkcjami. Aby uzyskać więcej informacji, zobacz Historia zmian języka Visual C++ 2003 – 2015.
Składnia
int scanf(
const char *format [,
argument]...
);
int _scanf_l(
const char *format,
_locale_t locale [,
argument]...
);
int wscanf(
const wchar_t *format [,
argument]...
);
int _wscanf_l(
const wchar_t *format,
_locale_t locale [,
argument]...
);
Parametry
format
Formatuj ciąg sterujący.
argument
Argumenty opcjonalne.
locale
Ustawienia regionalne do użycia.
Wartość zwracana
Zwraca liczbę pól pomyślnie przekonwertowanych i przypisanych; wartość zwracana nie zawiera pól, które zostały odczytane, ale nie zostały przypisane. Wartość zwracana 0 wskazuje, że żadne pola nie zostały przypisane.
Jeśli format
jest wskaźnikiem NULL
, wywoływana jest nieprawidłowa procedura obsługi parametrów, zgodnie z opisem w temacie Weryfikacja parametrów. Jeśli wykonanie jest dozwolone do kontynuowania, te funkcje zwracają EOF
i ustawiają wartość errno
EINVAL
.
Aby uzyskać informacje na temat tych i innych kodów błędów, zobacz errno
, _doserrno
, _sys_errlist
i _sys_nerr
.
Uwagi
Funkcja scanf
odczytuje dane ze standardowego strumienia stdin
wejściowego i zapisuje dane w lokalizacji podanej przez argument
element . Każdy argument
musi być wskaźnikiem do zmiennej typu odpowiadającej specyfikatorowi typu w programie format
. Jeśli kopiowanie odbywa się między ciągami nakładającymi się, zachowanie jest niezdefiniowane.
Ważne
Podczas odczytywania ciągu z parametrem scanf
zawsze określ szerokość %s
formatu (na przykład %32s
zamiast %s
); w przeciwnym razie nieprawidłowo sformatowane dane wejściowe mogą łatwo spowodować przepełninie buforu. Alternatywnie rozważ użycie metody , , wscanf_s
_scanf_s_l
_wscanf_s_l
lub fgets
.scanf_s
wscanf
jest wersją szerokoznakową ; scanf
argument to format
wscanf
ciąg o szerokim znaku. wscanf
i scanf
zachowuje się identycznie, jeśli strumień jest otwarty w trybie ANSI. scanf
obecnie nie obsługuje danych wejściowych ze strumienia UNICODE.
Wersje tych funkcji z sufiksem _l
są identyczne, z tą różnicą, że używają parametru ustawień regionalnych przekazanych zamiast bieżących ustawień regionalnych wątku.
Mapowania procedur tekstu ogólnego
TCHAR.H rutyna |
_UNICODE i _MBCS niezdefiniowane |
_MBCS zdefiniowany |
_UNICODE zdefiniowany |
---|---|---|---|
_tscanf |
scanf |
scanf |
wscanf |
_tscanf_l |
_scanf_l |
_scanf_l |
_wscanf_l |
Aby uzyskać więcej informacji, zobacz Pola specyfikacji formatu: scanf
i wscanf
funkcje.
Wymagania
Procedura | Wymagany nagłówek |
---|---|
scanf , _scanf_l |
<stdio.h> |
wscanf , _wscanf_l |
<stdio.h> lub <wchar.h> |
Konsola nie jest obsługiwana w aplikacjach platformy platforma uniwersalna systemu Windows (UWP). Standardowe dojścia strumienia skojarzone z konsolą programu stdin
, stdout
i i stderr
muszą zostać przekierowane, zanim funkcje czasu wykonywania języka C będą mogły ich używać w aplikacjach platformy UWP. Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.
Przykład
// crt_scanf.c
// compile with: /W3
// This program uses the scanf and wscanf functions
// to read formatted input.
#include <stdio.h>
int main( void )
{
int i, result;
float fp;
char c, s[81];
wchar_t wc, ws[81];
result = scanf( "%d %f %c %C %80s %80S", &i, &fp, &c, &wc, s, ws ); // C4996
// Note: scanf and wscanf are deprecated; consider using scanf_s and wscanf_s
printf( "The number of fields input is %d\n", result );
printf( "The contents are: %d %f %c %C %s %S\n", i, fp, c, wc, s, ws);
result = wscanf( L"%d %f %hc %lc %80S %80ls", &i, &fp, &c, &wc, s, ws ); // C4996
wprintf( L"The number of fields input is %d\n", result );
wprintf( L"The contents are: %d %f %C %c %hs %s\n", i, fp, c, wc, s, ws);
}
71 98.6 h z Byte characters
36 92.3 y n Wide characters
The number of fields input is 6
The contents are: 71 98.599998 h z Byte characters
The number of fields input is 6
The contents are: 36 92.300003 y n Wide characters
Zobacz też
Obsługa obliczeń matematycznych i zmiennoprzecinkowych
We/Wy strumienia
ustawienia regionalne
fscanf
, , _fscanf_l
, , fwscanf
_fwscanf_l
printf
, , _printf_l
, , wprintf
_wprintf_l
sprintf
, , _sprintf_l
, swprintf
, , _swprintf_l
__swprintf_l
sscanf
, , _sscanf_l
, , swscanf
_swscanf_l