Encoders
>
More...
>
C
>
Program
/* Function minscanf(), a minimal version of scanf(). */
#include <stdio.h>
#include <stdarg.h>
#include <ctype.h>
void minscanf
(char *fmt, ...);
main()
{
int a,b;
char c[20];
minscanf("%d %s %d",&a,c,&b);
printf("%d %s %d\n",a,c,b);
}
void minscanf(char *fmt, ...)
{
va_list ap;
char *p, *sval, format[10];
int i=0,*ival;
double *dval;
va_start(ap,fmt);
for(p=fmt; *p; p++)
{
if(*p!='%')
{
format[i++]=*p;
continue;
}
format[i]=*p;
while(!isalpha(*++p)&&*p)
format[++i]=*p;
format[++i]=*p;
format[++i]='\0';
switch(*p)
{
case 'c':
case 'd':
case 'i':
ival=va_arg(ap,int *);
scanf(format,ival);
break;
case 'u':
case 'o':
case 'x':
case 'X':
ival=va_arg(ap,unsigned *);
scanf(format,ival);
break;
case 'f':
case 'e':
case 'E':
case 'g':
case 'G':
dval=va_arg(ap,double *);
scanf(format,dval);
break;
case 's':
sval=va_arg(ap,char *);
scanf(format,sval);
break;
default:
scanf(format);
break;
}
i=0;
}
va_end(ap);
}
|