Exercise 7.3 - minprintf to handle facilities of printf

Question

Revise minprintf to handle more of the other facilities of printf.

/* minprintf: minimalistic printf function */
#include<stdarg.h>
void minprintf(char *fmt,...);

int main(void)
{
    char *a="Hello,World";
    minprintf("%s",a);
    int i = 10; 
        minprintf("%d\n", i); 
        int b = 011;
        minprintf("b in octal: %o, and in decimal: %d\n", b, b); 
        int h = 10; 
        minprintf("h in hex: %x, and in decimal: %d\n", h, h);
    return 0;
}

void minprintf(char *fmt,...)
{
    va_list ap; /* points to each unnamed arg in turn */
    char *p,*sval;
    int ival;
    double dval;

    va_start(ap,fmt);   /* make ap point to 1st unnamed arg */
    
    for(p=fmt;*p;p++)
    {
        if(*p != '%')
        {
            putchar(*p);
            continue;
        }

        switch(*++p)
        {
            case 'd':
                ival = va_arg(ap,int);
                printf("%d",ival);
                break;
            case 'f':
                dval = va_arg(ap,double);
                printf("%f",dval);
                break;
            case 's':
                for(sval = va_arg(ap,char *);*sval;sval++)
                putchar(*sval);
                break;
            case 'o':
                        ival = va_arg(ap,int);
                        printf("%o", ival);
                         break;
                    case 'x':
                        ival =va_arg(ap,int);
                        printf("%x", ival);
                        break;
            default:
                putchar(*p);
                break;
        }
    }
    va_end(ap); /* clean up when done */
}


    

Explanation