vwscanf() — Read Formatted Wide Character Data

Format

#include <stdarg.h>
#include <stdio.h>

int vwscanf(const wchar_t *format, va_list arg_ptr);

Language Level: ANSI

Threadsafe: Yes.

Locale Sensitive: The behavior of this function might be affected by the LC_CTYPE and LC_NUMERIC categories of the current locale. It might also be affected by the LC_UNI_CTYPE and LC_UNI_NUMERIC categories of the current locale if LOCALETYPE(*LOCALEUCS2) or LOCALETYPE(*LOCALEUTF) is specified on the compilation command. This function is not available when LOCALETYPE(*CLD) is specified on the compilation command. For more information, see Understanding CCSIDs and Locales.

Integrated File System Interface: This function is not available when SYSIFCOPT(*NOIFSIO) is specified on the compilation command.

Wide Character Function: See Wide Characters for more information.

Description

The vwscanf() function reads data from stdin into locations specified by a variable number of arguments. The vwscanf() function works just like the wscanf() function, except that arg_ptr points to a list of arguments whose number can vary from call to call in the program. These arguments should be initialized by va_start for each call. In contrast, the wscanf() function can have a list of arguments, but the number of arguments in that list is fixed when you compile the program.

Each argument must be a pointer to a variable with a type that corresponds to a type specifier in format-string. The format has the same form and function as the format string for the wscanf() function.

Return Value

The vwscanf() function returns the number of fields that were successfully converted and assigned. The return value does not include fields that were read but not assigned. The return value is EOF for an attempt to read at end-of-file if no conversion was performed. A return value of 0 means that no fields were assigned.

Example that uses vwscanf()

This example scans various types of data from stdin.

#include <stdio.h
#include <stdarg.h

int vread(wchar_t *fmt, ...)
{
	int rc;
	va_list arg_ptr;
	va_start(arg_ptr, fmt);
	rc = vwscanf(fmt, arg_ptr);
	va_end(arg_ptr);
	return(rc);
}

int main(void)
{
	int i, rc;
	float fp;
	char c, s[81];
	printf("Enter an integer, a real number, a character "
	"and a string : \n");
	rc = vread(L"%d %f %c %s",&i,&fp,&c, s);
	if (rc != 4)
		printf("Not all fields are assigned\n");
	else
	{
		printf("integer = %d\n", i);
		printf("real number = %f\n", fp);
		printf("character = %c\n", c);
		printf("string = %s\n",s);
	}
}
/***************** If input is: 12 2.5 a yes, *******************
************** then output should be similar to: ****************
Enter an integer, a real number, a character and a string :
integer = 12
real number = 2.500000
character = a
string = yes
*/

Related Information



[ Top of Page | Previous Page | Next Page | Contents | Index ]