diff options
| -rw-r--r-- | Makefile | 2 | ||||
| -rw-r--r-- | ft_printf.c | 16 | ||||
| -rw-r--r-- | ft_printf.h | 17 | ||||
| -rw-r--r-- | utils.c | 42 |
4 files changed, 73 insertions, 4 deletions
@@ -4,7 +4,7 @@ CCFLAGS = -Wall -Wextra #-Werror RM = rm -f NAME = ft_printf -SRC = ft_printf.c +SRC = ft_printf.c utils.c OBJ = $(SRC:.c=.o) INCLUDE = ft_printf.h diff --git a/ft_printf.c b/ft_printf.c index 9817e6c..c7bc473 100644 --- a/ft_printf.c +++ b/ft_printf.c @@ -7,6 +7,9 @@ int ft_printf(const char *format, ...) { int i; va_list ap; + /* char *convertions_flags; */ + + /* convertions_flags = "cspdiuxX%"; */ va_start(ap, format); i = -1; @@ -23,7 +26,8 @@ int ft_printf(const char *format, ...) ft_putstr(va_arg(ap, char*)); break; case 'p': - print_addr(va_arg(ap, void*)); + ft_putstr("0x"); + PUTXNBR(va_arg(ap, int)); break; case 'd': ft_putnbr(va_arg(ap, int)); @@ -35,9 +39,15 @@ int ft_printf(const char *format, ...) ft_putunbr(va_arg(ap, unsigned int)); break; case 'x': - ft_putxnbr(va_arg(ap, int)); + ft_putstr("0x"); + PUTXNBR(va_arg(ap, int)); break; case 'X': + ft_putstr("0x"); + PUTXMAJNBR(va_arg(ap, int)); + break; + case '%': + ft_putchar('%'); break; } } @@ -50,6 +60,6 @@ int ft_printf(const char *format, ...) int main() { - ft_printf("bonjour\n"); + ft_printf("b%conjo %X ur%p\n", 'r', 0xec54, NULL); return 0; } diff --git a/ft_printf.h b/ft_printf.h index f3c09ab..b755f91 100644 --- a/ft_printf.h +++ b/ft_printf.h @@ -1,6 +1,23 @@ #ifndef FT_PRINTF_H # define FT_PRINTF_H +#define PUTXNBR(nb) (ft_putxnbr(nb, "0123456789abcdef")) +#define PUTXMAJNBR(nb) (ft_putxnbr(nb, "0123456789ABCDEF")) + +/* +** ft_printf.c +*/ + int ft_printf(const char *format, ...); +/* +** utils.c +*/ + +void ft_putchar(char c); +void ft_putstr(char *str); +void ft_putnbr(int nb); +void ft_putxnbr(unsigned int n, char *hex_symbols); +void ft_putunbr(unsigned int n); + #endif @@ -0,0 +1,42 @@ +#include <unistd.h> +#include "ft_printf.h" + +void ft_putchar(char c) +{ + write(STDOUT_FILENO, &c, 1); +} + +void ft_putstr(char *str) +{ + while (*str) + write(STDOUT_FILENO, str++, 1); +} + +void ft_putnbr(int n) +{ + unsigned int p_n; + + p_n = n; + if (n < 0) + { + ft_putchar('-'); + p_n = -n; + } + if (p_n > 9) + ft_putnbr(p_n / 10); + ft_putchar(p_n % 10 + '0'); +} + +void ft_putxnbr(unsigned int n, char *hex_symbols) +{ + if (n > 15) + ft_putxnbr(n / 16, hex_symbols); + ft_putchar(hex_symbols[n % 16]); +} + +void ft_putunbr(unsigned int n) +{ + if (n > 9) + ft_putunbr(n / 10); + ft_putchar(n % 10 + '0'); +} |
