当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++ vswscanf()用法及代码示例


C++ 中的vfwscanf() 函数用于从宽字符串缓冲区中读取宽字符串。

vfwscanf() 函数在<cwchar> 头文件中定义。

vswscanf()原型

int vswscanf( const wchar_t* buffer, const wchar_t* format, va_list vlist );

vfwscanf() 函数从宽字符串缓冲区 buffer 读取数据并将值存储到由 vlist 定义的相应位置。

参数:

  • buffer:指向以空结尾的宽字符串以从中读取数据的指针。
  • format: 指向指定如何读取输入的以空字符结尾的宽字符串的指针。它由以 % 开头的格式说明符组成。
    格式字符串包含以下部分:
    • 除 % 之外的非空白字符,每个字符都使用输入流中的一个相同字符。如果流中的下一个字符比较不相等,可能会导致函数失败。
    • 空白字符:所有连续的空白字符都被视为单个空白字符。此外,'\n'、'\t'和''被认为是相同的。
    • 转换规范:遵循以下格式:
      • 指定开头的初始 % 字符
      • 一个可选的 * 称为 assignment-suppressing 字符。如果此字符存在,vfwscanf() 不会将结果分配给任何接收参数。
      • 一个可选的正整数,指定最大字段宽度。它指定vfwscanf() 在进行当前转换规范指定的转换时允许使用的最大字符数。
      • 一个可选的长度修饰符,指定接收参数的大小。
      • 转换格式说明符。
    格式说明符
    格式说明符 说明
    % 匹配文字 %
    c 匹配单个字符或多个字符。如果定义了宽度,则完全匹配宽度字符。
    s 匹配连续的非空白字符。如果定义了宽度,则完全匹配宽度字符或直到找到第一个空格。
    [set] 匹配给定字符集中的非空字符序列。如果^出现在 set 的开头,则匹配所有不在 set 中的字符。
    d 匹配十进制整数。
    i 匹配一个整数。
    o 匹配一个无符号八进制整数。
    X or x 匹配无符号十六进制整数。
    u 匹配无符号十进制整数。
    A or a, E or e, F or f, G or g 匹配一个浮点数。
    n 返回到目前为止读取的字符数。
    p 匹配定义指针的实现定义的字符序列。

    所以格式说明符的一般格式是:
    %[*][width][length]specifier
  • vlist :用于接收输入的参数列表。

返回:

  • 如果成功,vfwscanf() 函数会返回成功读取的参数数量。
  • 失败时,返回 EOF。

示例:vswscanf() 函数如何工作?

#include <cwchar>
#include <cstdarg>
#include <clocale>

void read( const wchar_t* buffer, const wchar_t* format, ... )
{
	va_list args;
	va_start (args, format);
	vswscanf (buffer, format, args);
	va_end (args);
}

int main()
{
	setlocale(LC_ALL, "en_US.UTF-8");

	wchar_t symbol[] = L"\u0fd7\u00c6\u20b9\u2127\u17d8";
	wchar_t str[20];

	read(symbol, L"%ls", str);
	wprintf(L"Random Symbols\n");

	for (int i=0; i<wcslen(str); i++)
	{
		putwchar(str[i]);
		putwchar('\n');
	}

	return 0;
}

运行程序时,可能的输出将是:

Random Symbols
࿗
Æ
₹
℧
៘

相关用法


注:本文由纯净天空筛选整理自 C++ vswscanf()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。