Udostępnij za pośrednictwem


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_errlisti _sys_nerr.

Uwagi

Funkcja scanf odczytuje dane ze standardowego strumienia stdin wejściowego i zapisuje dane w lokalizacji podanej przez argumentelement . 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 scanfzawsze 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_llub fgets.scanf_s

wscanf jest wersją szerokoznakową ; scanfargument 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, stdouti i stderrmuszą 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