From d7d3f39e54e093306d4685b6ecf9d492c4f1930e Mon Sep 17 00:00:00 2001 From: gbaconni Date: Fri, 15 Apr 2022 20:55:58 +0200 Subject: [PATCH] Improve hexadecimal and pointer by using ltoa instead of itoa --- Makefile | 5 +- libftprintf/Makefile | 4 +- .../{ft_itoa_base.c => ft_ltoa_base.c} | 12 +-- libftprintf/ft_vprintf.c | 2 +- libftprintf/ft_vprintf_hexadecimal.c | 10 +-- libftprintf/ft_vprintf_pointer.c | 7 +- libftprintf/libftprintf.h | 4 +- main.c | 80 ++++++++++++------- 8 files changed, 73 insertions(+), 51 deletions(-) rename libftprintf/{ft_itoa_base.c => ft_ltoa_base.c} (81%) diff --git a/Makefile b/Makefile index 0036ced..a440e32 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: gbaconni@student.42lausanne.ch +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2022/01/18 15:11:16 by gbaconni #+# #+# # -# Updated: 2022/04/15 17:19:14 by gbaconni ### lausanne.ch # +# Updated: 2022/04/15 20:37:26 by gbaconni ### lausanne.ch # # # # **************************************************************************** # # @@ -88,9 +88,10 @@ test: clean $(NAME) @$(PREFIX) ./$(NAME) "%d" 42 || true @$(PREFIX) ./$(NAME) "%x" 42 || true @$(PREFIX) ./$(NAME) "%X" 42 || true - @$(PREFIX) ./$(NAME) "42" "" || true @$(PREFIX) ./$(NAME) "%%" "" || true @$(PREFIX) ./$(NAME) "%p" "" || true + @$(PREFIX) ./$(NAME) "%p" "\n" || true + @$(PREFIX) ./$(NAME) "Forty Two" "" || true test2: leak @$(MAKE) test LEAK=1 diff --git a/libftprintf/Makefile b/libftprintf/Makefile index d9e14e4..787f442 100644 --- a/libftprintf/Makefile +++ b/libftprintf/Makefile @@ -6,7 +6,7 @@ # By: gbaconni@student.42lausanne.ch +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2022/01/18 15:11:16 by gbaconni #+# #+# # -# Updated: 2022/04/15 17:19:30 by gbaconni ### lausanne.ch # +# Updated: 2022/04/15 20:19:14 by gbaconni ### lausanne.ch # # # # **************************************************************************** # # @@ -30,7 +30,7 @@ SRC = \ $(LIBFT)/ft_calloc.c \ $(LIBFT)/ft_strlen.c \ $(LIBFT)/ft_itoa.c \ - ft_itoa_base.c \ + ft_ltoa_base.c \ ft_vprintf_char.c \ ft_vprintf_string.c \ ft_vprintf_pointer.c \ diff --git a/libftprintf/ft_itoa_base.c b/libftprintf/ft_ltoa_base.c similarity index 81% rename from libftprintf/ft_itoa_base.c rename to libftprintf/ft_ltoa_base.c index 7d49a62..d7ff41d 100644 --- a/libftprintf/ft_itoa_base.c +++ b/libftprintf/ft_ltoa_base.c @@ -1,21 +1,21 @@ /* ************************************************************************** */ /* */ /* ::: :::::::: */ -/* ft_itoa_base.c :+: :+: :+: */ +/* ft_ltoa_base.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: gbaconni +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2021/08/16 13:51:16 by gbaconni #+# #+# */ -/* Updated: 2022/04/15 00:08:27 by gbaconni ### lausanne.ch */ +/* Updated: 2022/04/15 20:20:23 by gbaconni ### lausanne.ch */ /* */ /* ************************************************************************** */ #include "libftprintf.h" -static int ft_intlen_base(int n, int nbase); +static long ft_longlen_base(long n, long nbase); static char *ft_strrev(char *s); -char *ft_itoa_base(int n, char *base) +char *ft_ltoa_base(long n, char *base) { char *s; int i; @@ -23,7 +23,7 @@ char *ft_itoa_base(int n, char *base) long nbase; nbase = ft_strlen(base); - s = (char *) ft_calloc((ft_intlen_base(n, nbase) + 1), sizeof(char)); + s = (char *) ft_calloc((ft_longlen_base(n, nbase) + 1), sizeof(char)); if (s == NULL) return (NULL); i = 0; @@ -43,7 +43,7 @@ char *ft_itoa_base(int n, char *base) return (ft_strrev(s)); } -static int ft_intlen_base(int n, int nbase) +static long ft_longlen_base(long n, long nbase) { size_t len; diff --git a/libftprintf/ft_vprintf.c b/libftprintf/ft_vprintf.c index 57d9c93..61bb1e2 100644 --- a/libftprintf/ft_vprintf.c +++ b/libftprintf/ft_vprintf.c @@ -6,7 +6,7 @@ /* By: gbaconni@student.42lausanne.ch +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/01/20 11:43:52 by gbaconni #+# #+# */ -/* Updated: 2022/04/15 16:37:06 by gbaconni ### lausanne.ch */ +/* Updated: 2022/04/15 20:44:24 by gbaconni ### lausanne.ch */ /* */ /* ************************************************************************** */ diff --git a/libftprintf/ft_vprintf_hexadecimal.c b/libftprintf/ft_vprintf_hexadecimal.c index 69ba0e8..8e2497f 100644 --- a/libftprintf/ft_vprintf_hexadecimal.c +++ b/libftprintf/ft_vprintf_hexadecimal.c @@ -6,7 +6,7 @@ /* By: gbaconni@student.42lausanne.ch +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/01/20 11:55:33 by gbaconni #+# #+# */ -/* Updated: 2022/04/15 00:13:02 by gbaconni ### lausanne.ch */ +/* Updated: 2022/04/15 20:22:19 by gbaconni ### lausanne.ch */ /* */ /* ************************************************************************** */ @@ -16,17 +16,17 @@ int ft_vprintf_hexadecimal(const char *format, va_list ap) { int ret; int len; - int d; + long l; char *s; (void) format; ret = 0; len = 0; - d = va_arg(ap, int); + l = va_arg(ap, long); if (format[0] == 'x') - s = ft_itoa_base(d, "0123456789abcdef"); + s = ft_ltoa_base(l, "0123456789abcdef"); else - s = ft_itoa_base(d, "0123456789ABCDEF"); + s = ft_ltoa_base(l, "0123456789ABCDEF"); len = ft_strlen(s); write(1, s, len); ret += len; diff --git a/libftprintf/ft_vprintf_pointer.c b/libftprintf/ft_vprintf_pointer.c index f305224..e4debe6 100644 --- a/libftprintf/ft_vprintf_pointer.c +++ b/libftprintf/ft_vprintf_pointer.c @@ -6,7 +6,7 @@ /* By: gbaconni@student.42lausanne.ch +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/01/20 11:56:16 by gbaconni #+# #+# */ -/* Updated: 2022/04/15 17:12:36 by gbaconni ### lausanne.ch */ +/* Updated: 2022/04/15 20:54:31 by gbaconni ### lausanne.ch */ /* */ /* ************************************************************************** */ @@ -29,10 +29,11 @@ int ft_vprintf_pointer(const char *format, va_list ap) write(1, NIL, len); return (len); } - s = ft_itoa_base((unsigned long) p, "0123456789ABCDEF"); + s = ft_ltoa_base((long) p, "0123456789abcdef"); len = ft_strlen(s); + write(1, "0x", 2); write(1, s, len); - ret += len; + ret += len + 2; free(s); return (ret); } diff --git a/libftprintf/libftprintf.h b/libftprintf/libftprintf.h index 9349c2d..55fe6cc 100644 --- a/libftprintf/libftprintf.h +++ b/libftprintf/libftprintf.h @@ -6,7 +6,7 @@ /* By: gbaconni@student.42lausanne.ch +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/01/18 15:26:06 by gbaconni #+# #+# */ -/* Updated: 2022/04/15 16:50:38 by gbaconni ### lausanne.ch */ +/* Updated: 2022/04/15 20:20:35 by gbaconni ### lausanne.ch */ /* */ /* ************************************************************************** */ @@ -25,7 +25,7 @@ /* Helper */ -char *ft_itoa_base(int n, char *base); +char *ft_ltoa_base(long n, char *base); /* Mandatory */ diff --git a/main.c b/main.c index 5e96ba5..0371328 100644 --- a/main.c +++ b/main.c @@ -6,7 +6,7 @@ /* By: baco +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/04/13 06:58:46 by gbaconni #+# #+# */ -/* Updated: 2022/04/15 17:19:36 by gbaconni ### lausanne.ch */ +/* Updated: 2022/04/15 20:48:55 by gbaconni ### lausanne.ch */ /* */ /* ************************************************************************** */ @@ -87,23 +87,55 @@ int main(int argc, char *argv[]) if (argc > 1) { format = argv[1]; - if (isnumber(argv[2])) - { - d = atoi(argv[2]); - ret = printf(format, d); - printf(": %d = printf(\"%s\", %d)\n", ret, format, d); - ret = ft_printf(format, d); - printf(": %d = ft_printf(\"%s\", %d)\n", ret, format, d); - } - else if (ft_strlen(argv[2]) == 1 && isalnum(argv[2][0])) - { - c = argv[2][0]; - ret = printf(format, c); - printf(": %d = printf(\"%s\", '%c')\n", ret, format, c); - ret = ft_printf(format, c); - printf(": %d = ft_printf(\"%s\", '%c')\n", ret, format, c); - } - else if (ft_strlen(argv[2]) > 1 && isstring(argv[2])) + if (format[0] == '%') + { + if (format[1] == 'c') + { + c = argv[2][0]; + ret = printf(format, c); + printf(": %d = printf(\"%s\", '%c')\n", ret, format, c); + ret = ft_printf(format, c); + printf(": %d = ft_printf(\"%s\", '%c')\n", ret, format, c); + } + else if (format[1] == 's') + { + s = argv[2]; + ret = printf(format, s); + printf(": %d = printf(\"%s\", \"%s\")\n", ret, format, s); + ret = ft_printf(format, s); + printf(": %d = ft_printf(\"%s\", \"%s\")\n", ret, format, s); + } + else if (format[1] == 'p') + { + s = argv[2]; + if (ft_strlen(s) == 0) + { + s = NULL; + ptr = NULL; + } + ret = printf(format, ptr); + printf(": %d = printf(\"%s\", \"%s\")\n", ret, format, s); + ret = ft_printf(format, ptr); + printf(": %d = ft_printf(\"%s\", \"%s\")\n", ret, format, s); + } + else if (format[1] == 'd' || format[1] == 'i' || format[1] == 'u') + { + d = atoi(argv[2]); + ret = printf(format, d); + printf(": %d = printf(\"%s\", %d)\n", ret, format, d); + ret = ft_printf(format, d); + printf(": %d = ft_printf(\"%s\", %d)\n", ret, format, d); + } + else if (format[1] == 'x' || format[1] == 'X') + { + d = atoi(argv[2]); + ret = printf(format, d); + printf(": %d = printf(\"%s\", %d)\n", ret, format, d); + ret = ft_printf(format, d); + printf(": %d = ft_printf(\"%s\", %d)\n", ret, format, d); + } + } + else { s = argv[2]; ret = printf(format, s); @@ -111,18 +143,6 @@ int main(int argc, char *argv[]) ret = ft_printf(format, s); printf(": %d = ft_printf(\"%s\", \"%s\")\n", ret, format, s); } - else if (ft_strlen(argv[2]) == 0) - { - s = argv[2]; - ret = printf(format, ptr); - printf(": %d = printf(\"%s\", \"%s\")\n", ret, format, s); - ret = ft_printf(format, ptr); - printf(": %d = ft_printf(\"%s\", \"%s\")\n", ret, format, s); - } - else - { - printf("Error: invalid argument\n"); - } } return (0); }