Programming Reference/Librarys
Question & Answer
Q&A is closed
The vscanf(), vfscanf(), and vsscanf() functions shall be equivalent to the scanf(), fscanf(), and sscanf() functions, respectively, except that instead of being called with a variable number of arguments, they are called with an argument list as defined in the <stdarg.h> header. These functions shall not invoke the va_end macro. As these functions invoke the va_arg macro, the value of ap after the return is unspecified.
#include <stdio.h> #include <stdlib.h> #include <stdarg.h> FILE *fp; int my_vfscanf(char *fmt, ...) { va_list argptr; int cnt; va_start(argptr, fmt); cnt = vfscanf(fp, fmt, argptr); va_end(argptr); return(cnt); } int main(void) { int inumber = 6; float fnumber = 7.0; char string[30] = "hoopy frood"; fp = tmpfile(); if (fp == NULL) { perror("tmpfile() call"); exit(1); } fprintf(fp,"%d %f %s\n",inumber,fnumber,string); rewind(fp); my_vfscanf("%d %f %s", &inumber, &fnumber, string); printf("%d * %f = %s\n", inumber, fnumber, string); fclose(fp); return 0; }
6 * 7.000000 = hoopy