따라서 unsigned int 를 사용함.
n 값이 0보다 클 때는 해당 수를 다시 ft_putnbr로 보내서 함수를 실행하고 write 를 보류한다.
그리고 n 값이 0에 도달하면 write 함수를 실행해서 해당되는 숫자를 출력한다.
이렇게 재귀함수로 구성한 이유는 %10 연산에서 얻는 결과값을 먼저 출력할 경우, 숫자가 뒤집어지기 때문
다른 방법으로는 INT 의 경우 자릿수가 최대 10이므로, 10 자리의 배열을 하나 만들고 while 문을 통해 동일하게 %10 연산을 한 결과를 뒤에서부터 해당 배열에 저장하고, 마지막에 출력하는 방법이 있다.
code
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_print_comb2.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: sungjpar <[email protected].> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/02/02 18:34:07 by sungjpar #+# #+# */
/* Updated: 2022/02/02 18:34:07 by sungjpar ### ########.fr */
/* */
/* ************************************************************************** */
#include <unistd.h>
void ft_putnbr(int nb);
void ft_putnbr(int nb)
{
unsigned int n;
char c;
if (nb < 0)
{
n = -nb;
write(1, "-", 1);
}
else
n = nb;
c = n % 10 + '0';
n /= 10;
if (n > 0)
ft_putnbr(n);
write(1, &c, 1);
}
test
#include <unistd.h>
void ft_putnbr(int nb);
int main(void)
{
ft_putnbr(-2147483648);
write(1, "\\n", 1);
ft_putnbr(0);
write(1, "\\n", 1);
ft_putnbr(100);
write(1, "\\n", 1);
ft_putnbr(2147483647);
write(1, "\\n", 1);
return (0);
}