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); }
