函数
<cwchar>

fwscanf

int fwscanf (FILE* stream, const wchar_t* format, ...);
从流中读取格式化数据
stream读取数据,并根据C宽字符串format将其存储到其他参数指向的位置。

附加参数应该指向已分配的对象,其类型由 format 字符串中相应的格式说明符指定。

文件中的宽字符的外部表示是多字节字符:这些字符的转换方式如同调用mbrtowc(使用stream的内部mbstate_t对象)。

这是fscanf<cstdio>)的宽字符版本。

参数

stream
指向一个FILE对象的指针,该对象标识要从中读取数据的输入流。
该流不应有任何朝向,或应是宽字符朝向的(对流的第一个 I/O 操作决定了它是字节朝向还是宽字符朝向,请参阅 fwide)。
format
C 语言宽字符串,包含一个格式字符串,其规范与 scanf 中的 format 相同(更多详情请参见 scanf)。
请注意,所有格式说明符的含义与 scanf 中的相同;因此,%lc应用于读取单个宽字符(而不是%c),同样%ls应用于宽字符串(而不是%s).
... (附加参数)
根据 format 字符串,该函数可能需要一系列附加参数,每个参数都包含一个指向已分配存储空间的指针,其中提取的字符的解释将以适当的类型存储。
这些参数的数量至少应与格式说明符存储的值的数量相同。多余的参数会被函数忽略。

返回值

成功时,函数返回成功填充的参数列表项的数量。由于匹配失败、读取错误或到达文件结尾,该计数可能与预期的项数相符,也可能更少(甚至为零)。

如果发生读取错误或在读取过程中到达文件尾,将设置相应的指示符(feofferror)。如果发生其中任何一种情况且在成功读取任何数据之前,将返回EOF

如果在解释宽字符时发生编码错误,函数会设置 errnoEILSEQ.

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/* fwscanf example */
#include <stdio.h>
#include <wchar.h>

int main ()
{
  wchar_t str [80];
  float f;
  FILE * pFile;

  pFile = fopen ("myfile.txt","w+");
  fwprintf (pFile, L"%f %ls", 3.1416, L"PI");
  rewind (pFile);
  fwscanf (pFile, L"%f", &f);
  fwscanf (pFile, L"%ls", str);
  fclose (pFile);
  wprintf (L"I have read: %f and %ls \n",f,str);
  return 0;
}

此示例代码创建一个名为myfile.txt的文件,并向其中写入一个浮点数和一个字符串。然后,流被倒回,并使用fscanf读取这两个值。最后,它将产生类似于
I have read: 3.141600 and PI


另见