ft_printf_6일차(갈아엎음...)

아따맘마·2020년 11월 19일
0

ft_printf

목록 보기
7/9

그동안 문제점

클러스터에서 GNL 평가를 받으면서 ft_printf()에 대해서 조언을 구했다.
그래서 내가 내린 결론은 갈아엎어야 할 것 같다. 그렇다고 완전히 엎는건 아니고 천천히 해보려고 한다.
지금까지 내가 코딩을 짰던 문제점은 전체를 한번에 짜려고 했던것이다.
GNL에서는 따로 코딩을 짜면서 잘 짜여져있나 확인해보기 어려워 숲을 보듯이 코딩을 짰었다. 그래서 이번에 ft_printf도 코딩할 때 중간중간 확인하지 않고 전체 코드를 다 짠 다음에 마지막으로 확인하려고 했다. 근데 ft_printf()와 GNL()의 차이점은
GNL은 ft_printf보다 조금 더 단순한 과제였다는 점이다..
ft_printf는 짜야할 함수도 많을 뿐더러 flag와 width 등 여러 옵션을 따져야 하기 때문에 한번에 짜기는 어려운 듯 하다.
그래서 숲을 만들기 위해 나무 한그루 한그루 심듯이 함수 하나씩 짜기 시작했다.

그래서 우선적으로 짠 부분은 정수형 d를 아무 옵션 없이 출력하기이다.

flag 짜보기

우선 ft_printf.c 파일에서 tag를 확인하는 함수를 만든다.

ft_format_tag()

static int	ft_format_tag(char **format, t_list *tag, va_list ap)

매개변수는 다음과 같다. format를 이중포인터로 받아 주소값을 넘기며 '\0'를 만나면 ERROR을 반환.
가장 처음으로 만나는 옵션을 flag이므로 ft_flag()로 flag를 확인하는 함수를 만든다.

ft_flag()

void	ft_flag(char **format, t_list *tag)

이 함수는 ft_tag.c 파일에서 만들어줬다.

	while (ft_strchr_opt(**format, FLAG))

이 반복문 조건에서 flag해당 문자가 FLAG 문자열 내에 존재하는지 확인해서 있으면 SUCCESS를 반환하니 반복문이 돈다.

근데 궁금한점!!

	while (ft_strchr_opt(**format, FLAG) == SUCCESS)

는 왜 안될까.... 이것만 알면 될것 같다.

	while ((res = ft_strchr_opt(**format, FLAG)) == SUCCESS)

로 해도 안된다...

삽질했던 부분...(이중포인터)

		if (**format == '0')
			(tag -> zero) = EXEC;
		(*format)++;

ft_flag()함수의 일부분이다. 원래 이중포인터에서 문자열의 주소값을 넘기려면 위에 보듯이
(*format)++ 로 넘겨줘야 했는데 실수로 format++로 코딩했어서 계속 틀렸었다...

profile
늦게 출발했지만 꾸준히 달려서 도착지점에 무사히 도달하자

0개의 댓글