├── Makefile ├── ft_printer.c ├── ft_printf.c └── ft_printf.h /Makefile: -------------------------------------------------------------------------------- 1 | NAME = libftprintf.a 2 | 3 | SRCS = ft_printf.c ft_printer.c 4 | 5 | OBJS = $(SRCS:.c=.o) 6 | CFLAGS = -Wall -Werror -Wextra 7 | 8 | all: $(NAME) 9 | 10 | $(NAME):$(OBJS) 11 | ar -cr $(NAME) $(OBJS) 12 | 13 | %.o:%.c ft_printf.h 14 | cc $(CFLAGS) -o $@ -c $< 15 | 16 | clean: 17 | rm -rf $(OBJS) 18 | 19 | fclean:clean 20 | rm -rf $(NAME) 21 | 22 | re: fclean all 23 | -------------------------------------------------------------------------------- /ft_printer.c: -------------------------------------------------------------------------------- 1 | /* ************************************************************************** */ 2 | /* */ 3 | /* ::: :::::::: */ 4 | /* ft_printer.c :+: :+: :+: */ 5 | /* +:+ +:+ +:+ */ 6 | /* By: ajaidi +#+ +:+ +#+ */ 7 | /* +#+#+#+#+#+ +#+ */ 8 | /* Created: 2021/11/23 18:36:31 by ajaidi #+# #+# */ 9 | /* Updated: 2021/11/23 18:37:08 by ajaidi ### ########.fr */ 10 | /* */ 11 | /* ************************************************************************** */ 12 | 13 | #include "ft_printf.h" 14 | 15 | int print_number(int nb) 16 | { 17 | long long n; 18 | int len; 19 | 20 | n = nb; 21 | len = 0; 22 | if (n < 0) 23 | { 24 | len += write(1, "-", 1); 25 | n *= -1; 26 | } 27 | if (n >= 10) 28 | { 29 | len += print_number(n / 10); 30 | len += print_number(n % 10); 31 | } 32 | if (n < 10) 33 | len += print_char(n + 48); 34 | return (len); 35 | } 36 | 37 | int print_adr(unsigned long int nb) 38 | { 39 | int len; 40 | 41 | len = 0; 42 | if (nb >= 16) 43 | { 44 | len += print_adr(nb / 16); 45 | len += print_adr(nb % 16); 46 | } 47 | if (nb < 16) 48 | { 49 | if (nb < 10) 50 | len += print_char(nb + 48); 51 | else 52 | len += print_char(nb + 87); 53 | } 54 | return (len); 55 | } 56 | 57 | int print_unb(unsigned int nb) 58 | { 59 | int len; 60 | 61 | len = 0; 62 | if (nb >= 10) 63 | { 64 | len += print_unb(nb / 10); 65 | len += print_unb(nb % 10); 66 | } 67 | if (nb < 10) 68 | len += print_char(nb + 48); 69 | return (len); 70 | } 71 | 72 | int print_hex(unsigned int nb, int s) 73 | { 74 | int len; 75 | 76 | len = 0; 77 | if (nb >= 16) 78 | { 79 | len += print_hex(nb / 16, s); 80 | len += print_hex(nb % 16, s); 81 | } 82 | if (nb < 16) 83 | { 84 | if (nb < 10) 85 | len += print_char(nb + 48); 86 | else 87 | { 88 | if (s == 1) 89 | len += print_char(nb + 87); 90 | else 91 | len += print_char(nb + 55); 92 | } 93 | } 94 | return (len); 95 | } 96 | 97 | int print_str(char *str) 98 | { 99 | int len; 100 | 101 | len = 0; 102 | if (!str) 103 | str = "(null)"; 104 | while (*str) 105 | len += write(1, str++, 1); 106 | return (len); 107 | } 108 | -------------------------------------------------------------------------------- /ft_printf.c: -------------------------------------------------------------------------------- 1 | /* ************************************************************************** */ 2 | /* */ 3 | /* ::: :::::::: */ 4 | /* ft_printf.c :+: :+: :+: */ 5 | /* +:+ +:+ +:+ */ 6 | /* By: ajaidi +#+ +:+ +#+ */ 7 | /* +#+#+#+#+#+ +#+ */ 8 | /* Created: 2021/11/22 03:45:24 by ajaidi #+# #+# */ 9 | /* Updated: 2021/11/23 18:46:43 by ajaidi ### ########.fr */ 10 | /* */ 11 | /* ************************************************************************** */ 12 | 13 | #include "ft_printf.h" 14 | 15 | int print_char(char c) 16 | { 17 | int len; 18 | 19 | len = write(1, &c, 1); 20 | return (len); 21 | } 22 | 23 | int ft_checker(char c, va_list *ptr) 24 | { 25 | int len; 26 | 27 | len = 0; 28 | if (c == 'c') 29 | len += print_char(va_arg(*ptr, int)); 30 | if (c == '%') 31 | len += write(1, "%", 1); 32 | if (c == 'd' || c == 'i') 33 | len += print_number(va_arg(*ptr, int)); 34 | if (c == 'u') 35 | len += print_unb(va_arg(*ptr, unsigned int)); 36 | if (c == 'x') 37 | len += print_hex(va_arg(*ptr, unsigned int), 1); 38 | if (c == 'X') 39 | len += print_hex(va_arg(*ptr, unsigned int), 2); 40 | if (c == 'p') 41 | { 42 | len += write(1, "0x", 2); 43 | len += print_adr(va_arg(*ptr, unsigned long int)); 44 | } 45 | if (c == 's') 46 | len += print_str(va_arg(*ptr, char *)); 47 | return (len); 48 | } 49 | 50 | int ft_printf(const char *format, ...) 51 | { 52 | int len; 53 | int i; 54 | va_list ptr; 55 | 56 | len = 0; 57 | i = 0; 58 | va_start(ptr, format); 59 | while (format[i]) 60 | { 61 | if (format[i] != '%') 62 | len += write(1, &format[i], 1); 63 | if (format[i] == '%') 64 | { 65 | len += ft_checker(format[i + 1], &ptr); 66 | i++; 67 | } 68 | i++; 69 | } 70 | va_end(ptr); 71 | return (len); 72 | } 73 | -------------------------------------------------------------------------------- /ft_printf.h: -------------------------------------------------------------------------------- 1 | /* ************************************************************************** */ 2 | /* */ 3 | /* ::: :::::::: */ 4 | /* ft_printf.h :+: :+: :+: */ 5 | /* +:+ +:+ +:+ */ 6 | /* By: ajaidi +#+ +:+ +#+ */ 7 | /* +#+#+#+#+#+ +#+ */ 8 | /* Created: 2021/11/23 18:39:43 by ajaidi #+# #+# */ 9 | /* Updated: 2021/11/23 18:42:04 by ajaidi ### ########.fr */ 10 | /* */ 11 | /* ************************************************************************** */ 12 | 13 | #ifndef FT_PRINTF_H 14 | # define FT_PRINTF_H 15 | # include 16 | # include 17 | 18 | int print_number(int nb); 19 | int print_char(char c); 20 | int ft_checker(char c, va_list *ptr); 21 | int ft_printf(const char *format, ...); 22 | int print_adr(unsigned long int nb); 23 | int print_unb(unsigned int nb); 24 | int print_hex(unsigned int nb, int s); 25 | int print_str(char *str); 26 | #endif 27 | --------------------------------------------------------------------------------