Ko in p and % and mix
This commit is contained in:
parent
fcb984218b
commit
ed5e23f863
3
Makefile
3
Makefile
@ -33,7 +33,8 @@ lib/libft.a:
|
|||||||
mv libft/libft.a lib/libft.a
|
mv libft/libft.a lib/libft.a
|
||||||
|
|
||||||
$(NAME): lib/libft.a $(OBJECTS)
|
$(NAME): lib/libft.a $(OBJECTS)
|
||||||
$(AR) -r $@ $?
|
cp lib/libft.a $(NAME)
|
||||||
|
$(AR) -rcs $@ $?
|
||||||
|
|
||||||
%.o: %.c
|
%.o: %.c
|
||||||
$(CC) -I./inc -L./lib -lft -c $(CFLAGS) $?
|
$(CC) -I./inc -L./lib -lft -c $(CFLAGS) $?
|
||||||
|
|||||||
71
ft_printf.c
71
ft_printf.c
@ -16,7 +16,6 @@
|
|||||||
#include "libft.h"
|
#include "libft.h"
|
||||||
#include "ft_printf.h"
|
#include "ft_printf.h"
|
||||||
|
|
||||||
|
|
||||||
int ft_isbase(char *str)
|
int ft_isbase(char *str)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@ -95,6 +94,11 @@ int print_string(va_list args)
|
|||||||
size_t len;
|
size_t len;
|
||||||
|
|
||||||
str = va_arg(args, char *);
|
str = va_arg(args, char *);
|
||||||
|
if (!str)
|
||||||
|
{
|
||||||
|
write(1, "(null)", 6);
|
||||||
|
return (6);
|
||||||
|
}
|
||||||
len = ft_strlen(str);
|
len = ft_strlen(str);
|
||||||
return (write(1, str, len));
|
return (write(1, str, len));
|
||||||
}
|
}
|
||||||
@ -118,6 +122,25 @@ int print_number(va_list args)
|
|||||||
return (wrote);
|
return (wrote);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int print_unumber(va_list args)
|
||||||
|
{
|
||||||
|
long n;
|
||||||
|
size_t len;
|
||||||
|
char *str;
|
||||||
|
int wrote;
|
||||||
|
|
||||||
|
wrote = 0;
|
||||||
|
str = ft_calloc(sizeof(char), 12);
|
||||||
|
if (!str)
|
||||||
|
return (wrote);
|
||||||
|
n = va_arg(args, unsigned int);
|
||||||
|
ft_putnbr_base(n, "0123456789", str);
|
||||||
|
len = ft_strlen(str);
|
||||||
|
wrote = write(1, str, len);
|
||||||
|
free(str);
|
||||||
|
return (wrote);
|
||||||
|
}
|
||||||
|
|
||||||
int print_hex(va_list args, int uppercase)
|
int print_hex(va_list args, int uppercase)
|
||||||
{
|
{
|
||||||
long n;
|
long n;
|
||||||
@ -140,6 +163,34 @@ int print_hex(va_list args, int uppercase)
|
|||||||
return (wrote);
|
return (wrote);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int print_pointer(va_list args, int uppercase)
|
||||||
|
{
|
||||||
|
long n;
|
||||||
|
size_t len;
|
||||||
|
char *str;
|
||||||
|
int wrote;
|
||||||
|
|
||||||
|
wrote = 0;
|
||||||
|
n = va_arg(args, unsigned long);
|
||||||
|
if (!n)
|
||||||
|
{
|
||||||
|
write(1,"(nil)", 5);
|
||||||
|
return (5);
|
||||||
|
}
|
||||||
|
str = ft_calloc(sizeof(char), 20);
|
||||||
|
if (!str)
|
||||||
|
return (wrote);
|
||||||
|
if (uppercase)
|
||||||
|
ft_putnbr_base(n, "0123456789ABCDEF", str);
|
||||||
|
else
|
||||||
|
ft_putnbr_base(n, "0123456789abcdef", str);
|
||||||
|
len = ft_strlen(str);
|
||||||
|
wrote = write(1, "0x", 2);
|
||||||
|
wrote += write(1, str, len);
|
||||||
|
free(str);
|
||||||
|
return (wrote);
|
||||||
|
}
|
||||||
|
|
||||||
int parse_conversion(const char **format, va_list args)
|
int parse_conversion(const char **format, va_list args)
|
||||||
{
|
{
|
||||||
int wrote;
|
int wrote;
|
||||||
@ -149,9 +200,13 @@ int parse_conversion(const char **format, va_list args)
|
|||||||
wrote = print_char(args);
|
wrote = print_char(args);
|
||||||
else if (**format == 's')
|
else if (**format == 's')
|
||||||
wrote = print_string(args);
|
wrote = print_string(args);
|
||||||
else if (ft_strchr("diu", **format))
|
else if (ft_strchr("di", **format))
|
||||||
wrote = print_number(args);
|
wrote = print_number(args);
|
||||||
else if (ft_strchr("px", **format))
|
else if (ft_strchr("u", **format))
|
||||||
|
wrote = print_unumber(args);
|
||||||
|
else if (ft_strchr("p", **format))
|
||||||
|
wrote = print_pointer(args, 0);
|
||||||
|
else if (ft_strchr("x", **format))
|
||||||
wrote = print_hex(args, 0);
|
wrote = print_hex(args, 0);
|
||||||
else if (ft_strchr("X", **format))
|
else if (ft_strchr("X", **format))
|
||||||
wrote = print_hex(args, 1);
|
wrote = print_hex(args, 1);
|
||||||
@ -164,14 +219,14 @@ int parse_placeholder(const char **format, va_list args)
|
|||||||
int wrote;
|
int wrote;
|
||||||
|
|
||||||
(*format)++;
|
(*format)++;
|
||||||
(void) args;
|
wrote = 0;
|
||||||
while (**format && !ft_strchr(conversions, **format))
|
while (**format && !ft_strchr(conversions, **format))
|
||||||
(*format)++;
|
(*format)++;
|
||||||
if (**format == '%')
|
if (**format == '%')
|
||||||
write(1, *format, 1);
|
write(1, *format, 1);
|
||||||
else
|
else
|
||||||
wrote = parse_conversion(format, args);
|
wrote = parse_conversion(format, args);
|
||||||
return (1);
|
return (wrote);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ft_printf(const char *format, ...)
|
int ft_printf(const char *format, ...)
|
||||||
@ -193,6 +248,7 @@ int ft_printf(const char *format, ...)
|
|||||||
return (wrote);
|
return (wrote);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
const char str[] = "HOIe";
|
const char str[] = "HOIe";
|
||||||
@ -207,5 +263,10 @@ int main(void)
|
|||||||
ft_printf("%%p = %p\n--\n", str);
|
ft_printf("%%p = %p\n--\n", str);
|
||||||
ft_printf("%%x = %x\n--\n", 255);
|
ft_printf("%%x = %x\n--\n", 255);
|
||||||
ft_printf("%%X = %X\n--\n", 255);
|
ft_printf("%%X = %X\n--\n", 255);
|
||||||
|
|
||||||
|
ft_printf(" %% %% %%\n");
|
||||||
|
ft_printf(" %% %% %%\n");
|
||||||
|
ft_printf(" %% %% %%\n");
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user