函数
<cwchar>

wscanf

int wscanf (const wchar_t* format, ...);
从标准输入读取格式化数据
stdin读取数据,并根据C宽字符串format将其存储到其他参数指向的位置。

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

宽字符在stdin是多字节字符:这些字符的转换方式如同调用了mbrtowc(使用了stream的内部mbstate_t对象)。

这是scanf<cstdio>)的宽字符等价函数。

参数

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
/* wscanf example */
#include <wchar.h>

int main ()
{
  wchar_t str [80];
  int i;

  wprintf (L"Enter your family name: ");
  wscanf (L"%ls",str);
  wprintf (L"Enter your age: ");
  wscanf (L"%d",&i);
  wprintf (L"Mr. %ls, %d years old.\n",str,i);
  wprintf (L"Enter a hexadecimal number: ");
  wscanf (L"%x",&i);
  wprintf (L"You have entered %#x (%d).\n",i,i);

  return 0;
}

可能的输出
Enter your family name: Soulié
Enter your age: 29
Mr. Soulié, 29 years old.
Enter a hexadecimal number: ff
You have entered 0xff (255).


另见