From 16a9ae0f60be25d060a7566fc6c861e501978843 Mon Sep 17 00:00:00 2001 From: whaffman Date: Thu, 24 Oct 2024 18:43:54 +0200 Subject: [PATCH] paco Ok no error checking though --- ft_printf.c | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/ft_printf.c b/ft_printf.c index b2a903f..2543f3d 100644 --- a/ft_printf.c +++ b/ft_printf.c @@ -51,28 +51,15 @@ void ft_write_str(char c, char *str) str[i] = '\0'; } -void ft_putnbr_base(long nbr, char *base, char *result) +void ft_putnbr_base(unsigned long nbr, char *base, char *result) { - int b; + unsigned int b; b = ft_isbase(base); if (b < 2) return ; - if (nbr >= 0 && nbr < b) - { + if (nbr < b) ft_write_str(base[nbr], result); - } - else if (nbr < 0) - { - ft_write_str('-', result); - if (nbr > -b) - ft_putnbr_base(-nbr, base, result); - else - { - ft_putnbr_base(nbr / (-b), base, result); - ft_putnbr_base(-(nbr % b), base, result); - } - } else if (nbr >= b) { ft_putnbr_base(nbr / b, base, result); @@ -80,6 +67,17 @@ void ft_putnbr_base(long nbr, char *base, char *result) } } +void ft_putnbr_signed(long nbr, char *base, char *result) +{ + if (nbr < 0) + { + *result = '-'; + ft_putnbr_base((unsigned long)(-nbr), base, result); + } + else + ft_putnbr_base((unsigned long) nbr, base, result); +} + int print_char(va_list args) { char c; @@ -115,7 +113,7 @@ int print_number(va_list args) if (!str) return (wrote); n = va_arg(args, int); - ft_putnbr_base(n, "0123456789", str); + ft_putnbr_signed(n, "0123456789", str); len = ft_strlen(str); wrote = write(1, str, len); free(str); @@ -223,7 +221,7 @@ int parse_placeholder(const char **format, va_list args) while (**format && !ft_strchr(conversions, **format)) (*format)++; if (**format == '%') - write(1, *format, 1); + wrote = write(1, *format, 1); else wrote = parse_conversion(format, args); return (wrote);