从流中读取带格式的数据。 这些功能有更安全的版本可用;请参阅 fscanf_s_fscanf_s_lfwscanf_s_fwscanf_s_l

语法

int fscanf(
   FILE *stream,
   const char *format [,
   argument ]...
);
int _fscanf_l(
   FILE *stream,
   const char *format,
   _locale_t locale [,
   argument ]...
);
int fwscanf(
   FILE *stream,
   const wchar_t *format [,
   argument ]...
);
int _fwscanf_l(
   FILE *stream,
   const wchar_t *format,
   _locale_t locale [,
   argument ]...
);

参数

stream
指向 FILE 结构的指针。

format
窗体控件字符串。

argument
可选参数。

locale
要使用的区域设置。

返回值

每个函数都将返回成功转换并分配的字段数;返回值不包括已读取但未分配的字段。 返回值为 0 表示没有分配任何字段。 如果出现错误或在首次转换前达到文件流的结尾,则 fscanffwscanf 的返回值为 EOF

这些函数验证其参数。 如果 streamformatNULL 指针,则调用无效的参数处理程序,如参数验证中所述。 如果允许执行继续,则这些函数将返回 EOF 并将 errno 设置为 EINVAL

备注

fscanf 函数将从 stream 的当前位置将数据读取到 argument(如果有)提供的位置。 每个 argument 必须为指向类型的变量的指针,该类型与 format 中的类型说明符对应。 format 控制输入字段的解释,格式和函数与 scanfformat 参数相同;有关 format 的说明,请参阅 scanf

fwscanffscanf 的宽字符版本;fwscanf 格式参数是宽字符字符串。 如果在 ANSI 模式下打开流,则这些函数行为相同。 fscanf 当前不支持 UNICODE 流的输入。

这些带有 _l 后缀的函数的版本相同,只不过它们使用传递的区域设置参数而不是当前线程区域设置。

一般文本例程映射

TCHAR.H 例程 _UNICODE_MBCS 未定义 _MBCS 已定义 _UNICODE 已定义
_ftscanf fscanf fscanf fwscanf
_ftscanf_l _fscanf_l _fscanf_l _fwscanf_l

有关详细信息,请参阅格式规范字段:scanfwscanf 函数

要求

函数 必需的标头
%> <stdio.h>
%> <stdio.h><wchar.h>

有关兼容性的详细信息,请参阅 兼容性

示例

// crt_fscanf.c
// compile with: /W3
// This program writes formatted
// data to a file. It then uses fscanf to
// read the various data back from the file.

#include <stdio.h>

FILE *stream;

int main( void )
{
   long l;
   float fp;
   char s[81];
   char c;

   if( fopen_s( &stream, "fscanf.out", "w+" ) != 0 )
      printf( "The file fscanf.out was not opened\n" );
   else
   {
      fprintf( stream, "%s %ld %f%c", "a-string",
               65000, 3.14159, 'x' );
      // Security caution!
      // Beware loading data from a file without confirming its size,
      // as it may lead to a buffer overrun situation.

      // Set pointer to beginning of file:
      fseek( stream, 0L, SEEK_SET );

      // Read data back from file:
      fscanf( stream, "%s", s );   // C4996
      fscanf( stream, "%ld", &l ); // C4996

      fscanf( stream, "%f", &fp ); // C4996
      fscanf( stream, "%c", &c );  // C4996
      // Note: fscanf is deprecated; consider using fscanf_s instead

      // Output data read:
      printf( "%s\n", s );
      printf( "%ld\n", l );
      printf( "%f\n", fp );
      printf( "%c\n", c );

      fclose( stream );
   }
}
a-string
65000
3.141590
x

另请参阅

流 I/O