Skip to content

Commit

Permalink
Merge pull request #9 from sebas119/sebastian_lopez
Browse files Browse the repository at this point in the history
Unsigned data types for printf
  • Loading branch information
sebaslherrera authored Oct 29, 2019
2 parents 7f074ab + 8f51ad6 commit 54069bd
Show file tree
Hide file tree
Showing 5 changed files with 122 additions and 1 deletion.
6 changes: 6 additions & 0 deletions holberton.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ int _abs(int n);
void rev_string(char *s);
char *itoa(int value, char *buffer, int base);
char *unsigned_itoa(unsigned int value, char *buffer, int base);
char *string_toupper(char *a);

/* End string tools*/

Expand All @@ -38,6 +39,11 @@ int printString(va_list args);
int printPercentage(va_list args);
int printInteger(va_list args);
int printBinary(va_list args);

int printUnsignedDecimal(va_list args);
int printUnsignedOctal(va_list args);
int printUnsignedHex(va_list args);
int printUnsignedHexUpper(va_list args);
/* End print library */

int (*get_print(const char *format))(va_list);
Expand Down
21 changes: 20 additions & 1 deletion string-tools.c
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ char *unsigned_itoa(unsigned int value, char *buffer, int base)
{
r = n % base;
if (r >= 10)
buffer[i++] = 65 + (r - 10);
buffer[i++] = 97 + (r - 10);
else
buffer[i++] = 48 + r;
n /= base;
Expand All @@ -117,3 +117,22 @@ char *unsigned_itoa(unsigned int value, char *buffer, int base)
rev_string(buffer);
return (buffer);
}


/**
* *string_toupper - Changes all lowercase letters of a string to uppercase
* @a: Pointer to a char array char[]
* Return: string uppercase
*/
char *string_toupper(char *a)
{
int i = 0;

while (a[i] != '\0')
{
if (a[i] >= 'a' && a[i] <= 'z')
a[i] -= 32;
i++;
}
return (a);
}
4 changes: 4 additions & 0 deletions struct_p.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ int (*get_print(const char *format))(va_list)
{"d", printInteger},
{"i", printInteger},
{"b", printBinary},
{"u", printUnsignedDecimal},
{"o", printUnsignedOctal},
{"x", printUnsignedHex},
{"X", printUnsignedHexUpper},
{NULL, NULL}
};
int i;
Expand Down
13 changes: 13 additions & 0 deletions test/main-holb.c
Original file line number Diff line number Diff line change
Expand Up @@ -64,5 +64,18 @@ int main(void)
len = _printf("%b", 4294967295);
_printf("\nLen of the previos: %d\n", len);

len = _printf("%u", 4294967295);
_printf("\nLen of the previos: %d\n", len);

len = _printf("%o", 4294967295);
_printf("\nLen of the previos: %d\n", len);

len = _printf("%x", 4294967295);
_printf("\nLen of the previos: %d\n", len);

len = _printf("%X", 4294967295);
_printf("\nLen of the previos: %d\n", len);


return (0);
}
79 changes: 79 additions & 0 deletions unsigned_types.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
#include "holberton.h"

/**
* printUnsignedDecimal - Prints an unsigned int
* @args: Argument passed
*
* Return: length of data
*/
int printUnsignedDecimal(va_list args)
{
char buff[40];
char *str;
unsigned int num = va_arg(args, unsigned int);
int size;

str = unsigned_itoa(num, buff, 10);
size = _strlen(str);

return (write(1, str, size));
}

/**
* printUnsignedOctal - Prints an unsigned octal
* @args: Argument passed
*
* Return: length of data
*/
int printUnsignedOctal(va_list args)
{
char buff[40];
char *str;
int num = va_arg(args, int);
int size;

str = unsigned_itoa(num, buff, 8);
size = _strlen(str);

return (write(1, str, size));
}



/**
* printUnsignedHex - Prints an unsigned hex
* @args: Argument passed
*
* Return: length of data
*/
int printUnsignedHex(va_list args)
{
char buff[40];
char *str;
int num = va_arg(args, int);
int size;

str = unsigned_itoa(num, buff, 16);
size = _strlen(str);

return (write(1, str, size));
}

/**
* printUnsignedHexUpper - Prints an unsigned hex upper
* @args: Argument passed
*
* Return: length of data
*/
int printUnsignedHexUpper(va_list args)
{
char buff[33];
char *str;
int num = va_arg(args, int);
int size;

str = string_toupper(unsigned_itoa(num, buff, 16));
size = _strlen(str);

return (write(1, str, size));
}

0 comments on commit 54069bd

Please sign in to comment.