diff --git a/bonus/ft_parsing_bonus.c b/bonus/ft_parsing_bonus.c index 6a1a088..6a4185d 100644 --- a/bonus/ft_parsing_bonus.c +++ b/bonus/ft_parsing_bonus.c @@ -6,59 +6,48 @@ /* By: dgaillet +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/11/19 15:35:15 by dgaillet #+# #+# */ -/* Updated: 2025/11/20 14:36:01 by dgaillet ### ########lyon.fr */ +/* Updated: 2025/11/20 18:07:52 by dgaillet ### ########lyon.fr */ /* */ /* ************************************************************************** */ #include "ft_printf_bonus.h" #include "libft.h" -static int next_not_digit(char *str) +static void get_padding(t_arg *arg, char *str) { - int i; - - i = 0; - while (ft_isdigit(str[i])) - i++; - return (i); -} - -static int nb_to_skip(char *str) -{ - if (*str == '-') - return (1 + next_not_digit(&str[1])); - else if (*str == '0') - return (1 + next_not_digit(&str[1])); - else if (*str == '.') - return (1 + next_not_digit(&str[1])); - else if (*str == ' ') - return (1 + next_not_digit(&str[1])); - return (1); + str--; + while (ft_isdigit(*str) && *str != '%') + str--; + str++; + arg->padding = ft_atoi(str); } static void ft_parse_str(t_arg *arg, char *str, char main_arg) { - if (*str != '0' && ft_isdigit(*str)) - { - arg->padding = ft_atoi(str); - str += nb_to_skip(str); - } - while (*str != main_arg) + while (*str != main_arg && *str != '.') { if (*str == '-') arg->minus = ft_atoi(&str[1]); - else if (*str == '0') + else if (*str == '0' && !ft_isdigit(str[-1])) arg->zero = ft_atoi(&str[1]); - else if (*str == '.') - arg->dot = ft_atoi(&str[1]); else if (*str == '#') arg->hash = 1; else if (*str == ' ') arg->space = ft_atoi(&str[1]); else if (*str == '+') arg->plus = 1; - str += nb_to_skip(str); + str++; } + if (*str == '.') + { + arg->dot = ft_atoi(str + 1); + if (!(arg->minus >= 0 || arg->zero >= 0 || arg->hash >= 0 + || arg->space >= 0 || arg->plus >= 0)) + get_padding(arg, str); + } + else if (!(arg->minus >= 0 || arg->zero >= 0 || arg->hash >= 0 + || arg->space >= 0 || arg->plus >= 0)) + get_padding(arg, str); } t_arg *ft_parsing(char *str) diff --git a/bonus/print_number_bonus.c b/bonus/print_number_bonus.c index 8fafc39..9cbcfae 100644 --- a/bonus/print_number_bonus.c +++ b/bonus/print_number_bonus.c @@ -6,7 +6,7 @@ /* By: dgaillet +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/11/17 12:26:23 by dgaillet #+# #+# */ -/* Updated: 2025/11/20 16:52:30 by dgaillet ### ########lyon.fr */ +/* Updated: 2025/11/20 17:26:09 by dgaillet ### ########lyon.fr */ /* */ /* ************************************************************************** */ @@ -16,7 +16,6 @@ static int padding_size(int space, int plus, t_arg *arg, int nbr) { int padding; - int dot; int nbr_size; if (arg->padding < 0) @@ -27,7 +26,7 @@ static int padding_size(int space, int plus, t_arg *arg, int nbr) else nbr_size = nbr_size_base(nbr, 10); if (arg->dot > nbr_size) - nbr_size = dot; + nbr_size = arg->dot; padding = padding - nbr_size; if (arg->zero >= 0) padding = padding - arg->zero; @@ -45,6 +44,8 @@ static int print_nb_flags(t_arg *arg, int nbr) if (arg->plus >= 0 && nbr > 0) plus = 1; + else + plus = 0; if (arg->plus >= 0 || arg->space < 0) space = 0; else diff --git a/test.c b/test.c index 83cf741..e91ff32 100644 --- a/test.c +++ b/test.c @@ -6,7 +6,7 @@ /* By: dgaillet +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/11/20 16:11:53 by dgaillet #+# #+# */ -/* Updated: 2025/11/20 16:19:29 by dgaillet ### ########lyon.fr */ +/* Updated: 2025/11/20 18:01:15 by dgaillet ### ########lyon.fr */ /* */ /* ************************************************************************** */ @@ -17,6 +17,6 @@ int main(void) { printf("===\t-\t===\n\n"); - printf("%d - ", printf("...%8.5i...\n", 34)); - printf("%d\n\n", ft_printf("...%8.5i...\n", 34)); + printf("%d - ", printf("...%10.s...\n", NULL)); + printf("%d\n\n", ft_printf("...%10.s...\n", NULL)); }