* 파라미터로 들어오는 fd와 int 변수 n을 이용해 n을 출력하는 함수
void ft_putnbr_fd(int n, int fd)
int n : 출력할 정수. 다만 write는 char형 변수의 주소를 이용해 출력하므로 n의 각 자릿수에 '0'을 더한 값을 출력
int fd : 파일 디스크립터. 정수값으로 파일 디스크립터를 받음.
유닉스 시스템에서 프로세스가 특정 파일에 접근하기 위한 추상적인 키.
모든 프로세스(프로그램이 메모리에 적재된 것. 프로그램의 인스턴스)가 갖추어야 하는 표준 POSIX 파일 서술자는 하단과 같다.
file descriptor의 값은 unsigned int 값이므로 음수가 될 수 없다.
다만 실제 write함수에서 테스트해본 결과 파일 디스크립터의 숫자에 상관없이 모두 출력한다. 파일 디스크립터의 정수에 따라 무엇이 달라지는지는 더욱 알아봐야 할 것 같다.
n이 -2147483648, 즉 int형 min값일 때는 n에 -1을 곱한 수가 int overflow가 발생한다. 이를 예외처리 해 주어야 한다.
재귀를 이용해 코드를 구현했다. n의 각 자릿수에 '0'을 더한 값을 출력하기 위해 n의 범위를 나누어준다.
#include "libft.h"
void ft_putnbr_fd(int n, int fd)
{
if (n == -2147483648)
{
write(fd, "-2147483648", 11);
}
else if (n < 0)
{
write(fd, "-", 1);
ft_putnbr_fd(-n, fd);
}
else if (n < 10 && n >= 0)
{
ft_putchar_fd(n + '0', fd);
}
else if (n > 0)
{
ft_putnbr_fd(n / 10, fd);
ft_putchar_fd(n % 10 + '0', fd);
}
}
(1) n이 -2147483648, 즉 int형 min값인지 검사한 후, int min값이면 -2147483648을 출력한다.
(2) n이 음수이면, -를 출력한 후 다시 ft_putnbr_fd함수를 -n값과 fd를 인자로 호출한다;
(3) n이 0부터 9 사이, 즉 한 자릿수이면 '0'을 더해 출력한다.
(4) n이 0보다 크면 n을 10으로 나눈 몫과 fd를 인자로 ft_putnbr_fd 함수를 호출한다.
(5) 그 이후 n을 10으로 나눈 나머지에 '0'을 더한 값을 ft_putchar_fd 함수의 인자로 하고 함수를 호출한다.
-->재귀