Поделиться через


scanf, , _scanf_lwscanf_wscanf_l

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

Примечание.

В Visual Studio 2015 printf были объявлены inline и scanf перемещены в <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, wscanf_s _scanf_s_l_wscanf_s_lили .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. Дополнительные сведения о совместимости см. в разделе Совместимость.

Пример

// 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_lfwscanf_fwscanf_l
printf, , _printf_lwprintf_wprintf_l
sprintf, , _sprintf_lswprintf, _swprintf_l__swprintf_l
sscanf, , _sscanf_lswscanf_swscanf_l