From 57a3b88e09a014c76aba338d6eca04be8bcb85bc Mon Sep 17 00:00:00 2001 From: Charles Date: Sun, 13 Oct 2019 10:45:02 +0200 Subject: Min width, zero filled, left adjusted Conversion of arg in a string, the padding is computed based on the length of the string. --- ft_printf.c | 78 ++++++++++++++++++++++++++++++------------------------------- 1 file changed, 38 insertions(+), 40 deletions(-) (limited to 'ft_printf.c') diff --git a/ft_printf.c b/ft_printf.c index 9540489..49781e1 100644 --- a/ft_printf.c +++ b/ft_printf.c @@ -5,65 +5,63 @@ int ft_printf(const char *format, ...) { - int i; + int print_len; va_list ap; + /* va_list ap_start; */ + /* int ap_index; */ t_list *format_list; - t_conversion conv; + char *str; if ((format_list = parse(format)) == NULL) return (-1); + /* ap_index = 0; */ va_start(ap, format); - i = -1; - while (format[++i]) + + /* va_copy(ap_start, ap); */ + print_len = -1; + while (format[++print_len]) { - if (format[i] == '%') + if (format[print_len] == '%') { - conv = format_list->data->conversion; - if (conv == CONVERSION_CHAR) - ft_putchar(va_arg(ap, char)); - else if (conv == CONVERSION_STR) - ft_putstr(va_arg(ap, char*)); - else if (conv == CONVERSION_PTR) - { - ft_putstr("0x"); - PUTXNBR(va_arg(ap, long unsigned int)); - } - else if (conv == CONVERSION_DECIMAL || conv == CONVERSION_INT) - ft_putnbr(va_arg(ap, int)); - else if (conv == CONVERSION_UINT) - ft_putunbr(va_arg(ap, unsigned int)); - else if (conv == CONVERSION_HEX_LOWER) - PUTXNBR(va_arg(ap, unsigned int)); - else if (conv == CONVERSION_HEX_UPPER) - PUTXMAJNBR(va_arg(ap, unsigned int)); - else if (conv == CONVERSION_PERCENT) - ft_putchar('%'); - i += format_list->data->len; + /* if (format_list->data->ap_index != -1) */ + /* { */ + /* ap_index = format_list->data->ap_index; */ + /* } */ + /* else */ + /* ap_index++; */ + /* printf("\n%d\n", format_list->data->left_adjusted); */ + if ((str = convert_to_str(format_list->data, ap)) == NULL) + return (-1); + ft_putstr(str); + free(str); + + + print_len += format_list->data->len; list_pop_front(&format_list); } else - write(STDOUT_FILENO, format + i, 1); + write(STDOUT_FILENO, format + print_len, 1); } va_end(ap); - return (0); + return (print_len); } int main() { - int test; + /* int test; */ - ft_printf("char: %c\n", 'r'); - ft_printf("string: %s\n", "bonjour"); - ft_printf("pointer: %p\n", &test); - ft_printf("int: %d or %i\n", 45, 54); - ft_printf("uint: %u\n", 1 << 31); - ft_printf("hex lower: %x\n", 0xabcf012); - ft_printf("hex upper: %X\n", 0xabcf012); - ft_printf("percent: %%\n"); + /* ft_printf("char: %c\n", 'r'); */ + /* ft_printf("string: %s\n", "bonjour"); */ + /* ft_printf("pointer: %p\n", &test); */ + /* ft_printf("int: %d or %i\n", 45, 54); */ + /* ft_printf("uint: %u\n", 1 << 31); */ + /* ft_printf("hex lower: %x\n", 0xabcf012); */ + /* ft_printf("hex upper: %X\n", 0xabcf012); */ + /* ft_printf("percent: %%\n"); */ /* ft_printf("precision %.2d\n", 43); */ - ft_printf("min width %4d\n", 43); - ft_printf("zero padding %04d\n", 43); - ft_printf("right adjusted %-4d\n", 43); + ft_printf("min width |%9d|\n", 43); + ft_printf("zero padding |%09d|\n", 43); + ft_printf("left adjusted |%-9d|\n", 43); return 0; } -- cgit