wscanf
函数 <cwchar>
int wscanf (const wchar_t* format, ...);
从stdin读取格式化的数据
从标准输入(
stdin)读取数据,并根据C宽字符串参数format将数据存储到由附加参数指定的位置。
附加参数应该指向已经分配的对象,该对象的类型由格式字符串中相应的格式说明符指定。
stdin中宽字符的外部表示形式是多字节字符:
这些字符的编译就像调用了
mbrtowc一样
(使用流的内部
mbstate_t对象)。
这是相当于
scanf
(<
cstdio>)的宽字符版本。
☲ 参数
format
C宽字符串,它包含一个格式字符串,该格式字符串遵循与scanf格式相同的规范(详情请参阅
scanf)。
请注意,所有格式说明符都与scanf中的含义相同;
因此,应使用%lc读取宽字符(而不是%c),应使用%ls读取宽字符串(而不是%s)。
... (附加参数)
根据格式字符串的不同,函数可能需要一个附加参数序列,每个参数包含一个指针,
该指针指向分配的存储空间,在该存储空间中,对提取出来的字符的解释将以相应的类型存储。
这些参数的数量至少应该与格式说明符中指定的值的数量一样多。其他参数被函数忽略。
☉ 返回值
如果成功,函数将返回成功填充参数列表的项数。该计数可以匹配预期的项数,
或者由于匹配失败、读取错误或文件结束的范围而小于(甚至为零)。
如果发生读取错误或在读取时到达文件结束,则设置正确的指示符(
feof或
ferror)。
并且,如果任何一种情况发生在任何数据可以成功读取之前,则返回
WEOF.
如果在解释宽字符时发生编码错误,该函数将
errno设置为EILSEQ。
☣ 示例
/* 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). |
🍄 另请参阅
scanf |
从stdin读取格式化的数据(function ) |
wprintf |
将格式化的数据打印到标准输出(function ) |
fgetws |
从流中得到宽字符串(function ) |