Encoders
Hub for Computer Whizzes Register to join us

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