myprintf

#include <stdio.h>

#include <stdlib.h>

#include <stdarg.h>

void printi(int n)

{

   char *p,*q;

   p=malloc(100);

   q=p;

   do{

       *p=n%10+48;

       p++;

   }while(n=n/10);

   p--;

   while(p!=q)

       putchar(*p--);

   putchar(*p);

   free(q);

}

void printa(char* p)

{

   char *q=p;

   while(*q)

       putchar(*q++);

}


void printx(int n)

{

   char *p,*q;

   p=malloc(100);

   q=p;

   do{

       *q=n%16>=10?n%16+55:n%16+48;

       q++;

   }while(n=n/16);

   q--;

   while(p!=q)

       putchar(*q--);

   putchar(*q);

   free(p);

}

int myprintf(const char *format, ...)

{

   //va_list p;

   //va_start(p,format);

   char c;

   int * p;

   p = (int *)&format;

   p++;

   while((c = *format++) != '\0')

   {

       switch (c)

       {

           case '%':

           c = *format++;

           switch (c)

           {

               case 'c':

               putchar(*(char *)p++);

               //putchar(va_arg(p,int));

               break;

               case 'd':

               printi(*(int *)p++);

               //printi(va_arg(p,int));

               break;

               case 's':

               printa((char *)*p++);

               //printa(va_arg(p,char *));

               break;

               case 'x':

               printx(*(int *)p++);

               //printx(va_arg(p,int));

               break;

               default:

               break;

           }

           break;

       default:

       putchar(c);

       }

   }

   p = NULL;

   return 0;

}

int main(void)

{

   myprintf("c=%c, d=%d, s=%s, x=%x\n", 'A', 100, "hello", 200);

   return 0;

}


你可能感兴趣的:(myprintf)