scanf, _scanf_l, wscanf, _wscanf_l

Считывает отформатированные данные из стандартного входного потока. Доступны более безопасные версии этих функций; см. ,scanf_s_scanf_s_l , , wscanf_s. _wscanf_s_l

Примечание

В Visual Studio 2015 printf семейство функций и scanf было объявлено как inline и перемещено в <stdio.h> заголовки и <conio.h> . При переносе старого кода вы можете увидеть ошибку компоновщика LNK2019 в связи с этими функциями. Дополнительные сведения см. в статье Журнал изменений Visual C++ с 2003 по 2015.

Синтаксис

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]...
);

Параметры

format
Строка управления форматированием.

argument
Необязательные аргументы.

locale
Используемый языковой стандарт.

Возвращаемое значение

Возвращает число успешно преобразованных и назначенных полей; Возвращаемое значение не включает поля, которые были прочитаны, но не назначены. Возвращаемое значение 0 указывает, что поля не были назначены.

Если format является указателем NULL , вызывается обработчик недопустимых параметров, как описано в разделе Проверка параметров. Если продолжение выполнения разрешено, эти функции возвращают EOF и устанавливают для errno значение EINVAL.

Сведения об этих и других кодах ошибок см. в разделе errno, _doserrno, _sys_errlistи _sys_nerr.

Комментарии

Функция scanf считывает данные из стандартного входного потока stdin и записывает данные в расположение, указанное параметром argument. Каждый параметр argument должен быть указателем на переменную, которая имеет тип, соответствующий спецификатору типа в параметре format. Если копирование производится между перекрывающимися строками, поведение не определено.

Важно!

При использовании scanf для чтения строки всегда следует указывать ширину для формата %s (например, %32s вместо %s); в противном случае ввод в неправильном формате может легко привести к переполнению буфера. Кроме того, рекомендуется использовать scanf_s, _scanf_s_l, _wscanf_s_lwscanf_s или fgets.

wscanf — это версия scanf с расширенными символами; аргумент format для wscanf — строка расширенных символов. wscanf и scanf ведут себя одинаково, если поток открыт в режиме ANSI. scanf сейчас не поддерживает ввод из потока ЮНИКОДА.

Версии этих функций с суффиксом _l идентичны за исключением того, что они используют переданный параметр языкового стандарта вместо языкового стандарта текущего потока.

Сопоставления подпрограмм универсального текста

TCHAR.H Обычной _UNICODE и _MBCS не определены _MBCS Определенные _UNICODE Определенные
_tscanf scanf scanf wscanf
_tscanf_l _scanf_l _scanf_l _wscanf_l

Дополнительные сведения см. в разделе Поля спецификации формата: scanf и wscanf функции.

Требования

Подпрограмма Обязательный заголовок
scanf, _scanf_l <stdio.h>
wscanf, _wscanf_l <stdio.h> или <wchar.h>

Консоль не поддерживается в приложениях универсальная платформа Windows (UWP). Стандартные дескрипторы потока, связанные с консолью , stdinstdoutи stderr, должны быть перенаправлены, прежде чем функции среды выполнения C смогут использовать их в приложениях UWP. Дополнительные сведения о совместимости см. в разделе Compatibility.

Пример

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

См. также раздел

Поддержка математических функций для чисел с плавающей запятой
Потоковый ввод-вывод
Локаль
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