函式
<cwchar>

vwscanf

int vwscanf ( const wchar_t * format, va_list arg );
從變數引數列表中讀取格式化資料
從標準輸入 ( stdin ) 讀取資料,並根據 C 寬字串 format 將其儲存到變數引數列表(由 arg 標識)指向的位置。

在內部,該函式從由 arg 標識的列表中檢索引數,就像對其使用了 va_arg 一樣,因此 arg 的狀態很可能會因呼叫而改變。

無論如何,arg 應該在呼叫之前的某個時刻由 va_start 初始化,並且預計在呼叫之後的某個時刻由 va_end 釋放。

寬字元在stdin是多位元組字元:這些字元會像呼叫 mbrtowc 一樣進行翻譯(使用 stream 的內部 mbstate_t 物件)。

這是 vscanf<cstdio> )的 寬字元 等效函式。

引數

format
C 語言寬字串,包含一個格式字串,其規範與 scanf 中的 format 相同(更多詳情請參見 scanf)。
請注意,所有格式說明符的含義與 scanf 中的相同;因此,%lc應用於讀取單個寬字元(而不是%c),同樣%ls應用於寬字串(而不是%s).
arg
一個標識由 va_start 初始化的可變引數列表的值。
va_list 是在 <cstdarg> 中定義的特殊型別。

返回值

成功時,函式返回成功填充的引數列表項的數量。由於匹配失敗、讀取錯誤或到達檔案結尾,該計數可能與預期的項數相符,也可能更少(甚至為零)。

如果發生讀取錯誤或在讀取過程中到達 檔案尾,則會設定相應的指示符( feofferror )。如果任何一個事件發生在成功讀取任何資料之前,則返回 EOF

如果在解釋寬字元時發生編碼錯誤,函式會設定 errnoEILSEQ.

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/* vwscanf example */
#include <stdio.h>
#include <stdarg.h>
#include <wchar.h>

void GetWideMatches ( const wchar_t * format, ... )
{
  va_list args;
  va_start (args, format);
  vwscanf (format, args);
  va_end (args);
}

int main ()
{
  int val;
  wchar_t str[100];

  wprintf (L"Please enter a number and a word: ");
  GetWideMatches (L"%d %l[aeiou]", &val, str);
  wprintf (L"Number read: %d\nFirst vowels read: %ls\n", val, str);

  return 0;
}

可能的輸出
Please enter a number and a word: 112 outperforming
Number read: 112
First vowels read: ou


另見