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


C++ vfwscanf用法及代码示例

C++中的vfwscanf()函数用于从文件流中读取宽字符串。

vfwscanf()功能在<cwchar>头文件。

vfwscanf()原型
int vfwscanf( FILE* stream, const wchar_t* format, va_list vlist );

vfwscanf()函数从文件流中读取数据stream并将这些值存储到由vlist


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

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

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

示例:vfwscanf()功能如何工作?
#include <cwchar>
#include <cstdarg>
#include <clocale>
#include <cstdio>

void read( FILE *fp, const wchar_t* format, ... )
{
	va_list args;
	va_start (args, format);
	vfwscanf (fp, format, args);
	va_end (args);
}

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

	wchar_t symbol[] = L"\u0915\u0916\u0917\u0918\u0919";
	wchar_t names[5][5] = {L"Ka", L"Kha", L"Ga", L"Gha", L"Nga"};
	FILE *fp = fopen("example.txt","w+");

	for (int i=0; i<5; i++)
		fwprintf(fp, L"%lc %ls ", symbol[i], names[i]);
	rewind(fp);

	wchar_t ch, str[5];
	for (int i=0; i<5; i++)
	{
		read(fp, L"%lc %ls ", &ch, str);
		wprintf(L"%lc - %ls\n", ch, str);
	}

	fclose(fp);
	return 0;
}

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

क - Ka
ख - Kha
ग - Ga
घ - Gha
ङ - Nga

相关用法

注:本文由纯净天空筛选整理自 C++ vfwscanf。非经特殊声明,原始代码版权归原作者所有,本译文的传播和使用请遵循“署名-相同方式共享 4.0 国际 (CC BY-SA 4.0)”协议。