Files
printf/running-out-of-names.c
2023-08-22 23:37:55 +03:00

156 lines
2.3 KiB
C

#include "main.h"
/**
* printf_dec - prints decimal
* @args: argument to print
* Return: number of characters printed
*/
int printf_dec(va_list args)
{
/* initvars*/
int n = va_arg(args, int);
int num, last = n % 10, digit;
int i = 1;
int exp = 1;
n = n / 10;
num = n;
if (last < 0)
{
_putchar('-');
num = -num;
n = -n;
last = -last;
i++;
}
if (num > 0)
{
while (num / 10 != 0)
{
exp = exp * 10;
num = num / 10;
}
num = n;
while (exp > 0)
{
digit = num / exp;
_putchar(digit + '0');
num = num - (digit * exp);
exp = exp / 10;
i++;
}
}
_putchar(last + '0');
return (i);
}
#include "main.h"
/**
* printf_oct - prints an octal number.
* @val: arguments.
* Return: counter.
*/
int printf_oct(va_list val)
{
int i;
int *array;
int counter = 0;
unsigned int num = va_arg(val, unsigned int);
unsigned int temp = num;
while (num / 8 != 0)
{
num /= 8;
counter++;
}
counter++;
array = malloc(counter * sizeof(int));
for (i = 0; i < counter; i++)
{
array[i] = temp % 8;
temp /= 8;
}
for (i = counter - 1; i >= 0; i--)
{
_putchar(array[i] + '0');
}
free(array);
return (counter);
}
/**
* printf_hex_aux - prints an hexgecimal number.
* @num: arguments.
* Return: counter.
*/
int printf_hex_aux(unsigned long int num)
{
long int i;
long int *array;
long int counter = 0;
unsigned long int temp = num;
while (num / 16 != 0)
{
num /= 16;
counter++;
}
counter++;
array = malloc(counter * sizeof(long int));
for (i = 0; i < counter; i++)
{
array[i] = temp % 16;
temp /= 16;
}
for (i = counter - 1; i >= 0; i--)
{
if (array[i] > 9)
array[i] = array[i] + 39;
_putchar(array[i] + '0');
}
free(array);
return (counter);
}
/**
* printf_hex - prints an hexgecimal number.
* @val: arguments.
* Return: counter.
*/
int printf_hex(va_list val)
{
int i;
int *array;
int counter = 0;
unsigned int num = va_arg(val, unsigned int);
unsigned int temp = num;
while (num / 16 != 0)
{
num /= 16;
counter++;
}
counter++;
array = malloc(counter * sizeof(int));
for (i = 0; i < counter; i++)
{
array[i] = temp % 16;
temp /= 16;
}
for (i = counter - 1; i >= 0; i--)
{
if (array[i] > 9)
array[i] = array[i] + 39;
_putchar(array[i] + '0');
}
free(array);
return (counter);
}