當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


C++ vfwscanf()用法及代碼示例

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++ vfwscanf()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。