C++ 中的vfwscanf() 函数用于从文件流中读取宽字符串。
vfwscanf() 函数在<cwchar> 头文件中定义。
vfwscanf()原型
int vfwscanf( FILE* stream, const wchar_t* format, va_list vlist );
vfwscanf() 函数从文件流 stream
中读取数据,并将值存储到由 vlist
定义的相应位置。
参数:
stream
:输入文件流以读取数据。format
: 指向指定如何读取输入的以空字符结尾的宽字符串的指针。它由以 % 开头的格式说明符组成。
格式字符串包含以下部分:- 除 % 之外的非空白字符,每个字符都使用输入流中的一个相同字符。如果流中的下一个字符比较不相等,可能会导致函数失败。
- 空白字符:所有连续的空白字符都被视为单个空白字符。此外,'\n'、'\t'和''被认为是相同的。
- 转换规范:遵循以下格式:
- 指定开头的初始 % 字符
- 一个可选的 * 称为 assignment-suppressing 字符。如果此字符存在,vfwscanf() 不会将结果分配给任何接收参数。
- 一个可选的正整数,指定最大字段宽度。它指定vfwscanf() 在进行当前转换规范指定的转换时允许使用的最大字符数。
- 一个可选的长度修饰符,指定接收参数的大小。
- 转换格式说明符。
格式说明符 格式说明符 说明 % 匹配文字 % c 匹配单个字符或多个字符。如果定义了宽度,则完全匹配宽度字符。 s 匹配连续的非空白字符。如果定义了宽度,则完全匹配宽度字符或直到找到第一个空格。 [放] 匹配给定字符集中的非空字符序列。如果^出现在 set 的开头,则匹配所有不在 set 中的字符。 d 匹配十进制整数。 i 匹配一个整数。 o 匹配一个无符号八进制整数。 X 或 x 匹配无符号十六进制整数。 u 匹配无符号十进制整数。 A 或 a、E 或 e、F 或 f、G 或 g 匹配一个浮点数。 n 返回到目前为止读取的字符数。 p 匹配定义指针的实现定义的字符序列。
所以格式说明符的一般格式是:%[*][width][length]specifier
vlist
:用于接收输入的参数列表。
返回:
- 如果成功,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++ vfwprintf()用法及代码示例
- C++ vfprintf()用法及代码示例
- C++ vfscanf()用法及代码示例
- C++ valarray cos用法及代码示例
- C++ valarray abs用法及代码示例
- C++ vector data()用法及代码示例
- C++ vector::max_size()用法及代码示例
- C++ vector::rbegin()用法及代码示例
- C++ vscanf()用法及代码示例
- C++ vswscanf()用法及代码示例
- C++ vector rbegin()、rend()用法及代码示例
- C++ valarray cshift用法及代码示例
- C++ valarray resize用法及代码示例
- C++ valarray pow()用法及代码示例
- C++ valarray exp()用法及代码示例
- C++ valarray log10用法及代码示例
- C++ vector::pop_back()用法及代码示例
- C++ valarray sinh用法及代码示例
- C++ valarray cos()用法及代码示例
- C++ vwscanf()用法及代码示例
注:本文由纯净天空筛选整理自 C++ vfwscanf()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。