function
<cwchar>

vwscanf

int vwscanf ( const wchar_t * format, va_list arg );
Read formatted data into variable argument list
Reads data from the standard input (stdin) and stores them according to the C wide string format into the locations pointed by the elements in the variable argument list identified by arg.

Internally, the function retrieves arguments from the list identified by arg as if va_arg was used on it, and thus the state of arg is likely to be altered by the call.

In any case, arg should have been initialized by va_start at some point before the call, and it is expected to be released by va_end at some point after the call.

The external representation of wide characters in stdin are multibyte characters: These are translated as if mbrtowc was called (using the stream's internal mbstate_t object).

This is the wide character equivalent of vscanf (<cstdio>).

Parameters

format
C wide string that contains a format string that follows the same specifications as format in scanf (see scanf for details).
Notice though, that all format specifiers have the same meaning as in scanf; therefore, %lc shall be used to read a wide character (and not %c), as well as %ls shall be used for wide strings (and not %s).
arg
A value identifying a variable arguments list initialized with va_start.
va_list is a special type defined in <cstdarg>.

Return Value

On success, the function returns the number of items of the argument list successfully filled. This count can match the expected number of items or be less (even zero) due to a matching failure, a reading error, or the reach of the end-of-file.

If a reading error happens or the end-of-file is reached while reading, the proper indicator is set (feof or ferror). And, if either happens before any data could be successfully read, EOF is returned.

If an encoding error happens interpreting wide characters, the function sets errno to EILSEQ.

Example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/* 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 ()
{
  FILE * pFile;
  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;
}


Possible output:
Please enter a number and a word: 112 outperforming
Number read: 112
First vowels read: ou

See also