int vscanf(const char *format, va_list arg_ptr)
int vfscanf(FILE *stream, const char *format, va_list arg_ptr)
int vsscanf(const char *buf, const char *format, va_list arg_ptr)
Прототип:
Описание:
Требуется наличие файла stdarg.h.
Функции vscanf(), vfscanf() и vsscanf() функционально эквивалентны scanf(), fscanf() и sscanf() соответственно. Различие состоит лишь в том, что список аргументов заменен на указатель на список аргументов. Этот указатель должен иметь тип va_list, определенный в stdarg.h.
Пример:
Следующий фрагмент программы показывает, как организуется вызов vscanf(). Программа считывает два целых числа, вводимых пользователем. Обращение к va_start() создает указатель на аргумент изменяемой длины, указывающий на начало списка аргументов. Именно этот указатель должен использоваться при вызове vscanf(), которая считывает числа. Обращение к va_end() очищает указатель на аргумент изменяемой длины.
#include <stdio.h>
#include <stdarg.h>
void read_int(int num, ...);
int main(void)
{
int a, b;
read_int(2, &a, &b);
printf("%d %d", a, b);
return 0;
}
void read_int(int num, ...)
{
va_list ptr; /* получение ptr */
/* инициализация ptr так, чтобы он указывал на первый аргумент после форматной строки
*/
va_start (ptr, num);
printf ("Enter %d integers: ", num);
/* чтение целых */
vscanf ("%d %d", ptr);
va_end(ptr);
}
#include <stdio.h>
#include <stdarg.h>
void read_int(int num, ...);
int main(void)
{
int a, b;
read_int(2, &a, &b);
printf("%d %d", a, b);
return 0;
}
void read_int(int num, ...)
{
va_list ptr; /* получение ptr */
/* инициализация ptr так, чтобы он указывал на первый аргумент после форматной строки
*/
va_start (ptr, num);
printf ("Enter %d integers: ", num);
/* чтение целых */
vscanf ("%d %d", ptr);
va_end(ptr);
}