vfscanf

Функция            Выполняет форматный ввод из потока.

Синтаксис          #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.

Смотрите также      fscanf scanf va_arg va_end va_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;
}