1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
   |  
#include <stdarg.h>
 #include <stdio.h>
#include <stdlib.h>
include "my_printf.h"
 
char    *my_tab_flag()
{
  char  *tab;
 
  tab = malloc(sizeof(tab) * 14);
  tab[0] = '%';
  tab[1] = 'd';
  tab[2] = 'i';
  tab[3] = 'c';
  tab[4] = 's';
  tab[5] = 'p';
  tab[6] = 'o';
  tab[7] = 'x';
  tab[8] = 'b';
  tab[9] = 'X';
  tab[10] = ' ';
  tab[11] = 'S';
  tab[12] = 'u';
  tab[13] = '\0';
  return (tab);
}
 
int     my_is_flag(char c, char *str)
{ 
  int   i;
 
  i = 0;
  while (str && str[i] && c != str[i])
    i = i + 1;
  return (i);
}
 
ptr_func        *make_ptr_func()
{
  ptr_func      *ptr_flag;
 
  ptr_flag = malloc(sizeof(ptr_flag) * 14);
  ptr_flag[0] = flag_perc;
  ptr_flag[1] = flag_di;
  ptr_flag[2] = flag_di;
  ptr_flag[3] = flag_c;
  ptr_flag[4] = flag_s;
  ptr_flag[5] = flag_p;
  ptr_flag[6] = flag_o;
  ptr_flag[7] = flag_x;
  ptr_flag[8] = flag_b;
  ptr_flag[9] = flag_X;
  ptr_flag[10] = flag_space;
  ptr_flag[11] = flag_S;
  ptr_flag[12] = flag_u;
  ptr_flag[13] = '\0';
  return (ptr_flag);
}
 
int     my_printf2(const char *format, va_list ap, int i)
{
  int   result;
  int   returned;
  ptr_func      *ptr_flag;
  char  *tab_flag;
 
  returned = 0;
  ptr_flag = make_ptr_func();
  tab_flag = my_tab_flag();
  while (format && format[i])
    {
      if (format[i] == '%')
        result = my_is_flag(format[i + 1], tab_flag);
      if (format[i] == '%' && result < 13)
        {
          returned = returned + ptr_flag[result](ap) - 1;
          i++;
        }
      else
        my_putchar(format[i]);
      returned++;
      i++;
    }
  return (returned);
}
 
int     my_printf(const char *format, ...)
{
  va_list       ap;
  int   returned;
  int   i;
 
  i = 0;
  va_start(ap, format);
  returned = my_printf2(format, ap, i);
  va_end(ap);
  return (returned);
} |