Advertisement
SamPolyhedron

Untitled

Apr 23rd, 2022
1,021
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.07 KB | None | 0 0
  1. #include <stdarg.h>
  2. #include <unistd.h>
  3. void    ft_putnbr(unsigned dig, unsigned len, char *sign, int *g_var)
  4. {
  5.     if (dig >= len)
  6.         ft_putnbr(dig / len, len, sign, g_var);
  7.     *g_var += (int)write (1, &sign[dig % len], 1);
  8. }
  9. void    ft_dig(long dig, int len, char *sign, int *g_var)
  10. {
  11.     (dig < 0) ? (*g_var += (int)write(1, "-", 1), \
  12.     ft_putnbr(-dig, len, sign,g_var)) : ft_putnbr(dig, len, sign, g_var);
  13. }
  14. ssize_t ft_putstr(char *str, int len)
  15. {
  16.     while (str && str[len] && ++len);
  17.     return (str ? write(1, str, len) : write(1, "(null)", 6));
  18. }
  19. int ft_printf(const char *fmt, ...)
  20. {
  21.     int     g_var = 0;
  22.     va_list ap;
  23.     va_start(ap, fmt);
  24.     while (*fmt)
  25.     {
  26.         if (*fmt == '%' && *(fmt + 1) == 's' && (fmt += 2))
  27.             g_var += (int)ft_putstr(va_arg(ap, char *), 0);
  28.         else if (*fmt == '%' && *(fmt + 1) == 'x' && (fmt += 2))
  29.             ft_putnbr(va_arg(ap, int), 16, "0123456789abcdef", &g_var);
  30.         else if (*fmt == '%' && *(fmt + 1) == 'd' && (fmt += 2))
  31.             ft_dig(va_arg(ap, int), 10, "0123456789", &g_var);
  32.         else
  33.             g_var += (int)write(1, fmt++, 1);
  34.     }
  35.     return (va_end(ap), g_var);
  36. }
  37.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement