열렬히.뛰기

util2

école 42 > ft_printf > util2

개요

ft_putnbr : 숫자 출력. 반환값 처리를 위해 함수 상당수를 분리

  • get_intmin : int 최솟값 처리
  • get_negative : 음수 처리
  • others : 10보다 큰 수 처리

코드

c

#include "ft_printf.h"

static void	get_intmin(int *cnt)
{
	ssize_t	a;

	a = write(1, "-2147483648", 11);
	if (a == -1)
	{
		(*cnt) = -1;
		return ;
	}
	(*cnt) += 11;
}

static void	get_negative(int n, int *cnt)
{
	ssize_t	a;

	a = write(1, "-", 1);
	if (a == -1)
	{
		(*cnt) = -1;
		return ;
	}
	(*cnt)++;
	ft_putnbr(-n, cnt);
}

static void	others(int n, int *cnt)
{
	ft_putnbr(n / 10, cnt);
	if (*cnt == -1)
		return ;
	ft_putnbr(n % 10, cnt);
	if (*cnt == -1)
		return ;
}

void	ft_putnbr(int n, int *cnt)
{
	char	c;
	ssize_t	a;

	if (n == -2147483648)
		get_intmin(cnt);
	else if (n < 0)
		get_negative(n, cnt);
	else if (n < 10)
	{
		c = '0' + n;
		a = write(1, &c, 1);
		if (a == -1)
		{
			(*cnt) = -1;
			return ;
		}
		(*cnt)++;
		return ;
	}
	else
		others(n, cnt);
}

void	ft_putnbr_u(unsigned int n, int *cnt)
{
	ssize_t	a;

	if (n >= 10)
	{
		ft_putnbr_u(n / 10, cnt);
		if (*cnt == -1)
			return ;
	}
	a = write(1, &"0123456789"[n % 10], 1);
	if (a == -1)
	{
		(*cnt) = -1;
		return ;
	}	
	(*cnt)++;
}