Encoders
Hub for Computer Whizzes Register to join us

Encoders > More... > C > Program

/* Function minprintf(), a minimal version of printf(). */

#include <stdio.h>
#include <stdarg.h>
#include <ctype.h>

void minprintf(char *fmt, ...);

main()
{
        minprintf("name:%s\nage:%d\ngender:%c\n","bob",21,'M');
}

void minprintf(char *fmt, ...)
{
	va_list ap;
	char *p, *sval, format[10];
	int i,ival;
	double dval;
	va_start(ap,fmt);
	for(p=fmt; *p; p++)
	{
		if(*p!='%')
		{
			putchar(*p);
			continue;
		}
		i=0;
		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);
				printf(format,ival);
				break;
			case 'u':
			case 'o':
			case 'x':
			case 'X':
				ival=va_arg(ap,unsigned);
				printf(format,ival);
				break;
			case 'f':
			case 'e':
			case 'E':
			case 'g':
			case 'G':
				dval=va_arg(ap,double);
				printf(format,dval);
				break;
			case 's':
				for(sval=va_arg(ap,char *); *sval; sval++)
					putchar(*sval);
				break;
			default:
				putchar(*p);
				break;
		}
	}
	va_end(ap);
}