scanf, _scanf_l, wscanf, _wscanf_l
Odczyty sformatowanych danych ze standatdowego strumienia wejściowego.Bardziej bezpieczne wersje tych funkcji są dostępne w scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l.
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
Ciąg formantu formatu.argument
Argumenty opcjonalne.locale
Ustawienia regionalne do użycia.
Wartość zwracana
Zwraca liczbę pól pomyślnie przekonwertowanych i przypisanych; zwracana wartość nie uwzględnia pól, które zostały odczytane, ale nie przypisane.Zwracana wartość wynosząca 0 wskazuje, że nie przydzielono żadnych pól.
Jeśli format lub NULL, wywoływany jest nieprawidłowy parametr uchwytu, zgodnie z opisem w Sprawdzanie poprawności parametru.Jeśli wykonanie może być kontynuowane, te funkcje zwracają EOF i ustawiają errno na EINVAL.
Aby uzyskać informacje na temat tych i innych kodów błędu, zobacz _doserrno, errno, _sys_errlist, and _sys_nerr.
Uwagi
Funkcja scanf odczytuje dane ze standardowego strumienia wejściowego stdin i zapisuje dane w lokalizacji podanej przez argument.Każdy argument musi być wskaźnikiem do zmiennej o typie odpowiadającym specyfikatorowi typu w format.Jeśli kopiowanie odbywa się między nakładającymi się ciągami, zachowanie jest niezdefiniowane.
Uwaga dotycząca zabezpieczeń |
---|
Podczas odczytywania ciągu z scanf, zawsze należy określać szerokość dla formatu %s (na przykład "%32s" zamiast "%s"); w przeciwnym razie niepoprawnie sformatowane dane wejściowe mogą łatwo spowodować przepełnienie buforu.Alternatywnie, należy rozważyć użycie scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l lub fgets. |
wscanf to wersja znaku dwubajtowego scanf; argument format do wscanf to ciąg znaku dwubajtowego.wscanf i scanf zachowują się identycznie, jeżeli strumień jest otwarty w trybie ANSI.scanf obecnie nie obsługuje danych wejściowych ze strumienia UNICODE.
Wersje tych funkcji z przyrostkiem _l są identyczne z wyjątkiem stosowania regionalnych parametrów zamiast bieżącego ciągu.
Rutynowe mapowania zwykłego tekstu
Procedura Tchar.h |
_UNICODE & _MBCS nie zdefiniowano |
_MBCS zdefiniowano |
_UNICODE zdefiniowany |
---|---|---|---|
_tscanf |
scanf |
scanf |
wscanf |
_tscanf_l |
_scanf_l |
_scanf_l |
_wscanf_l |
Aby uzyskać więcej informacji, zobacz Pola specyfikacji formatu — funkcje scanf i wscanf.
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 Windows Store.Standardowe uchwyty strumienia powiązane z konsolą—stdin, stdout, i stderr—muszą zostać przekierowane zanim będą wykorzystane przez funkcje środowiska uruchomieniowego C w aplikacjach Windows Store.Dodatkowe informacje 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);
}
Odpowiednik w programie .NET Framework
Zobacz też metody Parse, takie jak System::Double::Parse.
Zobacz też
Informacje
Obsługa liczb zmiennoprzecinkowych
fscanf, _fscanf_l, fwscanf, _fwscanf_l
printf, _printf_l, wprintf, _wprintf_l