scanf, _scanf_l, wscanf, _wscanf_l

从标准输入流读取设置数据格式。 这些更安全版本功能可用;请参见 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]... 
);

参数

  • format
    窗体控件字符串。

  • argument
    可选参数。

  • locale
    使用的区域设置。

返回值

返回成功转换和分配的字段数;返回值不包括读取,但未赋值的字段。 返回值为 0 表示字段未分配。

如果 format 是 NULL 指针,无效参数调用处理程序,如 参数验证所述。 如果执行允许继续,这些函数返回 EOF 并将 errno 到 EINVAL。

有关这些属性和其他错误代码的信息,请参见 _doserrno、errno、_sys_errlist 和_sys_nerr

备注

scanf 函数读取标准输入流 stdin 并将数据添加到 argument出自的位置。 每 argument 必须是指向对应于 format的类型说明符类型的变量。 如果复制出现在重叠的字符串之间,该行为不确定。

安全说明安全说明

在读取与 scanf时的一个字符串,用于 %s 格式始终指定宽度 (例如,而不是 "%s"的 "%32s" );否则,将不格式正确的输入很容易导致缓冲区溢出。或者,使用 scanf_s, _scanf_s_l, wscanf_s, _wscanf_s_lfgets,请考虑。

wscanf 是 scanf的宽字符版本;为 wscanf 的 format 参数是宽字符字符串。 如果流在 ANSI 模式下,中打开wscanf 和 scanf 具有相同的行为。 scanf 当前不支持从 UNICODE 流的输入。

这些功能的版本与 _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 应用商店 apps 不受支持。 标准流处理与控件个,stdin,stdout和 stderr,在 C 运行时函数在 Windows 应用商店 apps 之前,可以使用它们必须重定向。 有关其他的兼容性信息,请参见中介绍的 兼容性

示例

// 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);
}
  

.NET Framework 等效项

请参见

参考

浮点支持

流I/O

区域设置

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