Функция Выполняет форматный ввод из потока.
Синтаксис #include
int vfscanf(FILE *stream, const char *format,
va_list arglist);
Файл, содержащий stdio.h
прототип
Описание Функции v...scanf известны как дополнительные
точки входа для функций ...scanf. Они ведут себя
точно также, как и их ...scanf-двойники, но они
имеют доступ к указателю на список аргументов, а
не к самому аргументному списку.
vfscanf сканирует несколько полей ввода и читает
из потока по одному символу в каждый момент вре-
мени. Затем каждое поле форматируется в соответс-
твии с форматной спецификацией, передавемой в
vfscanf в форматной строке, на которую указывает
format. И наконец, vfscanf запоминает отформати-
рованный ввод по адресу, передаваемому ему в ка-
честве аргумента, следующего за format. Число
спецификаций формата и адресов должно быть равно
числу полей ввода.
Смотри в scanf описание информации, включенной в
спецификацию формата.
vfscanf может закончить сканирование конкретного
поля, не достигнув нормального символа конца_поля
(пробел), или полностью прервать его по ряду при-
чин. Смотри в scanf описание различных случаев.
Возвращаемое vfscanf возвращает число входных полей, которые
значение были сосканированы, преобразованы и запомнены.
Возвращаемое значение не вкдлючает сканированные
поля, которые не были запомнены. Если не было
сохранено ни одно поле, то возвращаемое значение
- 0.
Если vfscanf пытается читать в конце_файла, то
возвращаемое значение EOF.
Переносимость vfscanf поддерживается на UNIX System V.
Смотрите также fscanfscanfva_argva_endva_start
Пример:
#include
#include
FILE *fp;
int vfsf(char *fmt, ...);
{
va_list argptr;
int cnt;
va_start(argptr,format);
cnt = vfscanf(fp,fmt,argptr);
va_end(argptr);
return (cnt);
}
int main(void)
{
int inumber = 30;
float fnumber = 90;
char string[4] = "abc";
fp = tmpfile();
if(fp == NULL)
{
perror("Вызов tmpfile");
exit(1);
}
fprintf(fp,"%d %f %s",inumber,fnumber,string);
rewind(fp);
vfsf("%d %f %s",&inumber,&fnumber,string);
printf("%d %f %s",inumber,fnumber,string);
fclose(fp);
return 0;
}