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