Sdílet prostřednictvím


scanf, _scanf_l, wscanf, _wscanf_l

Čte formátovaná data ze standardního vstupního datového proudu. K dispozici jsou bezpečnější verze těchto funkcí; viz scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l.

Poznámka

V sadě Visual Studio 2015 Byly printf deklarovány a přesunuty inline<stdio.h> do hlaviček <conio.h> a scanf funkcí. Pokud migrujete starší kód, může se zobrazit chyba linkeru LNK2019 v souvislosti s těmito funkcemi. Další informace najdete v tématu Historie změn v jazyce Visual C++ 2003 – 2015.

Syntaxe

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
Formátovací řetězec ovládacího prvku

argument
Volitelné argumenty

locale
Národní prostředí, které se má použít

Vrácená hodnota

Vrátí počet polí úspěšně převedených a přiřazených; návratová hodnota neobsahuje pole, která byla přečtená, ale nepřiřazená. Vrácená hodnota 0 označuje, že nebyla přiřazena žádná pole.

Pokud format je NULL ukazatel, je vyvolána neplatná obslužná rutina parametru, jak je popsáno v ověření parametru. Pokud provádění může pokračovat, tyto funkce se vrátí EOF a nastaví errno na EINVAL.

Informace o těchto a dalších kódech chyb naleznete v tématu , , , a_sys_nerr . _sys_errlist_doserrnoerrno

Poznámky

Funkce scanf čte data ze standardního vstupního datového proudu stdin a zapisuje data do umístění zadaného uživatelem argument. Každý argument musí být ukazatel na proměnnou typu, která odpovídá specifikátoru typu v format. Pokud probíhá kopírování mezi řetězci, které se překrývají, chování není definováno.

Důležité

Při čtení řetězce s scanf, vždy zadat šířku formátu %s (například %32s místo %s); jinak nesprávně formátovaný vstup může snadno způsobit přetečení vyrovnávací paměti. Alternativně zvažte použití scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_l nebo fgets.

wscanfje verze širokého znaku scanfformat ; argument je wscanf řetězec širokého znaku. wscanf a scanf chovejte se stejně, pokud je datový proud otevřen v režimu ANSI. scanf v současné době nepodporuje vstup z datového proudu UNICODE.

Verze těchto funkcí s příponou _l jsou shodné s tím rozdílem, že používají parametr národního prostředí předaný místo aktuálního národního prostředí vlákna.

Mapování rutin obecného textu

TCHAR.H Rutinní _UNICODE a _MBCS není definován _MBCS Definovány _UNICODE Definovány
_tscanf scanf scanf wscanf
_tscanf_l _scanf_l _scanf_l _wscanf_l

Další informace naleznete v tématu Pole specifikace formátu: scanf a wscanf funkce.

Požadavky

Rutina Požadovaný hlavičkový soubor
scanf, _scanf_l <stdio.h>
wscanf, _wscanf_l <stdio.h> nebo <wchar.h>

Konzola není podporována v aplikacích pro Univerzální platforma Windows (UPW). Standardní zpracování datových proudů, které jsou přidružené ke konzole , a , stderrmusí být přesměrovány před tím, stdinstdoutnež je funkce runtime jazyka C mohou používat v aplikacích pro UPW. Další informace o kompatibilitě najdete v tématu Kompatibilita.

Příklad

// 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

Viz také

Podpora pro matematiku a plovoucí desetinou čárku
Vstupně-výstupní operace streamu
Národní prostředí
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