[ft_printf] (%d, %i, %u)

J_JEON·2022년 4월 22일
0

ft_printf

목록 보기
4/5

구현한 ft_printf에서 %d, %i, %u 출력의 구현부

10진수 숫자를 출력하는 %d

ssize_t	ft_print_d(va_list **a)
{
	int		vatemp; //가변인자에서 읽어온 데이터를 저장할 변수
	char	*str; //읽어온 정수를 문자열로 바꿔 저장해줄 저장공간
	ssize_t	print_size;

	print_size = 0;
	vatemp = (int)va_arg(**a, int); //int 크기만큼 가변인자에서 가져옴
	if (vatemp == 0) //만약 읽어온 값이 0이라면
		print_size = write(1, "0", 1); // 0을 출력
	else
	{
		str = ft_itoa(vatemp); //itoa 사용하여 읽어온 값을 문자열로 바꿔줌
		print_size = write(1, str, ft_strlen(str));
        //문자열을 출력하고 크기를 저장
		free(str);
        //itoa를 통해 할당되었던 문자열의 저장공간을 해제해줌
	}
	return (print_size); //출력한 크기를 반환
}

10진수 정수를 출력하는 %i

ssize_t	ft_print_i(va_list **a)
{
	int		vatemp; //가변인자에서 읽어온 데이터를 저장할 변수
	char	*str; //읽어온 정수를 문자열로 바꿔 저장해줄 저장공간
	ssize_t	print_size;

	print_size = 0;
	vatemp = (int)va_arg(**a, int); //int 크기만큼 가변인자에서 가져옴
	if (vatemp == 0) //만약 읽어온 값이 0이라면
		print_size = write(1, "0", 1); // 0을 출력
	else
	{
		str = ft_itoa(vatemp); //itoa 사용하여 읽어온 값을 문자열로 바꿔줌
		print_size = write(1, str, ft_strlen(str));
        //문자열을 출력하고 크기를 저장
		free(str);
        //itoa를 통해 할당되었던 문자열의 저장공간을 해제해줌
	}
	return (print_size); //출력한 크기를 반환
}

부호없는 10진수 숫자를 출력하는 %u

ssize_t	ft_print_u(va_list **a)
{
	unsigned int	vatemp;
    //부호가 없어야하기에 unsigned int 사용
	char			*str;
	ssize_t			print_size;

	print_size = 0;
	vatemp = (unsigned int)va_arg(**a, unsigned int);
    //가변인자에서 unsigned int 크기만큼 읽어옴
	if (vatemp == 0) //읽어온 값이 0이라면
		print_size = write(1, "0", 1); //0 출력
	else
	{
		str = ft_ltoa(vatemp);
        // itoa보다 큰 범위를 바꿔줄 수 있는 ltoa 함수 사용하여 문자열로 변환
		print_size = write(1, str, ft_strlen(str));
        //문자열을 출력해줌
		free(str);
        //출력한 문자열의 저장공간을 해제해줌
	}
	return (print_size); //출력한 크기를 반환
}
profile
늅늅

0개의 댓글