summaryrefslogtreecommitdiff
path: root/ft_printnbr.c
diff options
context:
space:
mode:
authorDominik Kaiser2024-04-12 16:44:17 +0200
committerDominik Kaiser2024-04-12 16:44:17 +0200
commitccf6226d8e0dc412206c5b9271654519357b0e2f (patch)
treeba5aece735e7ab1989c8c42988858f7addb65c7a /ft_printnbr.c
parent71eea3dbef2110114eb6f648e9ffdfb079884678 (diff)
downloadlibft-ccf6226d8e0dc412206c5b9271654519357b0e2f.tar.gz
libft-ccf6226d8e0dc412206c5b9271654519357b0e2f.zip
Add ft_printf
Diffstat (limited to 'ft_printnbr.c')
-rw-r--r--ft_printnbr.c80
1 files changed, 80 insertions, 0 deletions
diff --git a/ft_printnbr.c b/ft_printnbr.c
new file mode 100644
index 0000000..2a42ed8
--- /dev/null
+++ b/ft_printnbr.c
@@ -0,0 +1,80 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ft_printnbr.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: dkaiser <dkaiser@student.42heilbronn.de +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2024/03/13 15:18:40 by dkaiser #+# #+# */
+/* Updated: 2024/03/18 11:41:27 by dkaiser ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "ft_printf.h"
+
+static void printnbr_rec(int n, int *len)
+{
+ char c;
+ int success;
+
+ if (*len < 0)
+ return ;
+ c = '0' + n % 10;
+ if (n > 9)
+ printnbr_rec(n / 10, len);
+ if (*len < 0)
+ return ;
+ success = write(1, &c, 1);
+ if (success < 0)
+ *len = -1;
+ else
+ (*len)++;
+}
+
+int ft_printnbr(int nbr)
+{
+ int len;
+
+ len = 0;
+ if (nbr == -2147483648)
+ return (write(1, "-2147483648", 11));
+ if (nbr < 0)
+ {
+ len = write(1, "-", 1);
+ nbr *= -1;
+ }
+ printnbr_rec(nbr, &len);
+ if (len < 0)
+ return (-1);
+ return (len);
+}
+
+static void printunbr_rec(unsigned int n, int *len)
+{
+ char c;
+ int success;
+
+ if (*len < 0)
+ return ;
+ c = '0' + n % 10;
+ if (n > 9)
+ printunbr_rec(n / 10, len);
+ if (*len < 0)
+ return ;
+ success = write(1, &c, 1);
+ if (success < 0)
+ *len = -1;
+ else
+ (*len)++;
+}
+
+int ft_printunbr(unsigned int nbr)
+{
+ int len;
+
+ len = 0;
+ printunbr_rec(nbr, &len);
+ if (len < 0)
+ return (-1);
+ return (len);
+}