Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions funcs_array.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#ifndef _FUNCS_ARRAY_
#define _FUNCS_ARRAY_
print_t funcs[] = {
{"c", print_char},
{"s", print_string},
{"d", print_int},
{"i", print_int},
{"u", print_unsigned},
{"o", print_octal},
{NULL, NULL}
};
#endif /* _FUNCS_ARRAY_ */
26 changes: 0 additions & 26 deletions get_print_functions.c

This file was deleted.

8 changes: 3 additions & 5 deletions holberton.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ typedef struct printer
int (*fn)(va_list);
} print_t;


int _putchar(char c);
int _printf(const char *format, ...);
int print_char(va_list ap);
Expand All @@ -24,8 +23,7 @@ int print_int(va_list ap);
int print_unsigned(va_list ap);
int print_octal(va_list ap);
int print_digit(int num, int *count);
int print_digit_unsigned(unsigned int num, int *count);
int print_unsigned_digit(unsigned int num, int *count);
int print_digit_octal(unsigned int num, int *count);
int call_print_fn(char ch, print_t funcs[], va_list ap);

#endif
int call_print_fn(char ch, va_list ap);
#endif /* __HOLBERTON_H__ */
163 changes: 0 additions & 163 deletions print_funcs.c

This file was deleted.

30 changes: 30 additions & 0 deletions print_funcs0.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#include <stdarg.h>
#include <unistd.h>

/**
* print_char - prints a char parameter from a va_list
* @ap: va_list from calling function
* Return: integer count of characters printed
*/
int print_char(va_list ap)
{
return (write(1, va_arg(ap, int), 1));
}

/**
* print_string - prints a string parameter from a va_list
* @ap: va_list from calling function
* Return: integer count of characters printed
*/
int print_string(va_list ap)
{
char *str = va_arg(ap, char *);
int count = 0;

if (!str)
str = "(null)";
while (str[count] != '\0')
count += write(1, str[count], 1);

return (count);
}
59 changes: 59 additions & 0 deletions print_funcs1.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
#include <limits.h>
#include <stdarg.h>
#include <stdlib.h>

/**
* print_int - prints an integer from va_list
* @ap: va_list object from calling function
* Return: integer count of characters printed
*/
int print_int(va_list ap)
{
int *count_ptr;
int num;

count_ptr = malloc(sizeof(*count_ptr));

if (!count_ptr)
exit(-1);

*count_ptr = 0;
num = va_arg(ap, int);

(*count_ptr) = print_digit(num, count_ptr);

return (*count_ptr);
}

/**
* print_digit - print the digits recursively
* @num: next int in the va_arg list
* @count: pointer to integer count digits
* Return: pointer to integer count of character printed
*/
int print_digit(int num, int *count)
{
if (num < 0)
{
if (num == INT_MIN)
{
(*count) += write(1, '-', 1);
num++;
num = -num;
if (num / 10)
print_digit(num / 10, count);
(*count) += write(1, (num % 10) + 1 + '0', 1);
return (*count);
}
else
{
(*count) += write('-');
num = -num;
}
}
if (num / 10)
print_digit(num / 10, count);

(*count) += write(1, (num % 10) + '0', 1);
return (*count);
}
80 changes: 80 additions & 0 deletions print_funcs4.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
#include <stdarg.h>
#include <stdlib.h>
#include <unistd.h>

/**
* print_unsigned - prints an unsigned int from va_list
* @ap: va_list object from calling function
* Return: integer count of characters printed
*/
int print_unsigned(va_list ap)
{
int *count_ptr;
unsigned int num;

count_ptr = malloc(sizeof(*count_ptr));

if (!count_ptr)
exit(-1);

*count_ptr = 0;
num = va_arg(ap, unsigned int);

(*count_ptr) = print_unsigned_digit(num, count_ptr);

return (*count_ptr);
}

/**
* print_unsigned_digit - print the digits recursively
* @num: next unsigned int in the va_arg list
* @count: pointer to integer count digits
* Return: pointer to integer count of character printed
*/
int print_unsigned_digit(unsigned int num, int *count)
{
if (num / 10)
print_unsigned_digit(num / 10, count);

(*count) += write(1, (num % 10) + '0', 1);
return (*count);
}


/**
* print_octal - prints an unsigned int octal from va_list
* @ap: va_list object from calling function
* Return: integer count of characters printed
*/
int print_octal(va_list ap)
{
int *count_ptr;
unsigned int num;

count_ptr = malloc(sizeof(*count_ptr));

if (!count_ptr)
exit(-1);

*count_ptr = 0;
num = va_arg(ap, unsigned int);

(*count_ptr) = print_digit_octal(num, count_ptr);

return (*count_ptr);
}

/**
* print_digit_octal - print the digits recursively
* @num: next usigned octal int in the va_arg list
* @count: pointer to integer count digits
* Return: pointer to integer count of character printed
*/
int print_digit_octal(unsigned int num, int *count)
{
if (num / 8)
print_digit_octal(num / 8, count);

(*count) += write(1, (num % 8) + '0', 1);
return (*count);
}
Loading