From 814e9cd482e924418735060c8abd9aa6b07f9840 Mon Sep 17 00:00:00 2001 From: stefansilverio <494@holbertonschool.com> Date: Mon, 22 Oct 2018 18:21:49 +0000 Subject: [PATCH 1/5] adding print_digits --- print_digits.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 print_digits.c diff --git a/print_digits.c b/print_digits.c new file mode 100644 index 0000000..6861bed --- /dev/null +++ b/print_digits.c @@ -0,0 +1,23 @@ +#include + +void print_num(int num) +{ + if (num < 0) + { + _putchar('-'); + num = -num; + } + + if (num / 10) + print_num(num / 10); + + _putchar((num % 10) + '0'); +} + + +int main(int argc, char *argv[]) +{ + print_num(atoi(argv[1])); + _putchar('\n'); + return (0); +} From 47c49b287eb5925b9148739d2a3552a051464d55 Mon Sep 17 00:00:00 2001 From: stefansilverio <494@holbertonschool.com> Date: Mon, 22 Oct 2018 19:50:08 +0000 Subject: [PATCH 2/5] new print_digits file --- print_digits.c | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/print_digits.c b/print_digits.c index 6861bed..e069151 100644 --- a/print_digits.c +++ b/print_digits.c @@ -1,7 +1,27 @@ #include +#include +#include "holberton.h" -void print_num(int num) +int *print_num(int num, int *count); + +int main(int argc, char *argv[]) +{ + int *count; + int counter = 0; + + (void) argc; + count = &counter; + + print_num(atoi(argv[1]), count); + _putchar('\n'); + printf("%d\n", *count); + return (0); +} + + +int *print_num(int num, int *count) { + if (num < 0) { _putchar('-'); @@ -9,15 +29,10 @@ void print_num(int num) } if (num / 10) - print_num(num / 10); - - _putchar((num % 10) + '0'); -} - + { + print_num(num / 10, count); + } -int main(int argc, char *argv[]) -{ - print_num(atoi(argv[1])); - _putchar('\n'); - return (0); + (*count) += _putchar((num % 10) + '0'); + return (count); } From 1fe418433c16fe5f72723730933a67a9303acb9f Mon Sep 17 00:00:00 2001 From: stefansilverio <494@holbertonschool.com> Date: Tue, 23 Oct 2018 18:09:28 +0000 Subject: [PATCH 3/5] updated header file --- holberton.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/holberton.h b/holberton.h index 0a23dc2..653c8dd 100644 --- a/holberton.h +++ b/holberton.h @@ -17,6 +17,8 @@ int _putchar(char c); int _printf(const char *format, ...); int print_char(va_list ap); int print_string(va_list ap); +int print_int(va_list ap); +int print_digit(int num, int *count); int call_print_fn(char ch, print_t funcs[], va_list ap); #endif From 2f5d5f9326c1bdcacc291e3cffbb3e4eeee02b00 Mon Sep 17 00:00:00 2001 From: stefansilverio <494@holbertonschool.com> Date: Tue, 23 Oct 2018 18:10:27 +0000 Subject: [PATCH 4/5] updated cases --- printf.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/printf.c b/printf.c index 1d47453..48c6e14 100644 --- a/printf.c +++ b/printf.c @@ -14,9 +14,10 @@ int _printf(const char *format, ...) print_t funcs[] = { {"c", print_char}, {"s", print_string}, + {"d", print_int}, + {"i", print_int}, {NULL, NULL} }; - va_start(ap, format); for (i = 0; format != NULL && format[i] != '\0'; i++) { @@ -32,6 +33,8 @@ int _printf(const char *format, ...) break; case 'c': case 's': + case 'd': + case 'i': count += call_print_fn(format[i], funcs, ap); break; default: From b1ffe500a38a28d2d9c3951f52a7f4fdb7992c67 Mon Sep 17 00:00:00 2001 From: stefansilverio <494@holbertonschool.com> Date: Tue, 23 Oct 2018 18:11:27 +0000 Subject: [PATCH 5/5] added print_int and print_digit functions to handle integers --- print_funcs.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/print_funcs.c b/print_funcs.c index b64efec..823b156 100644 --- a/print_funcs.c +++ b/print_funcs.c @@ -30,3 +30,48 @@ int print_string(va_list ap) return (count); } +/** + * print_int - prints a digit 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(int)); + + 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 num in the va_arg list + * @count: count digits + * Return: Always 0 + */ +int print_digit(int num, int *count) +{ + if (num < 0) + { + (*count) += _putchar('-'); + num = -num; + } /* handle int min & max */ + + if (num / 10) + { + print_digit(num / 10, count); + } + + (*count) += _putchar((num % 10) + '0'); + return (*count); +}