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