[42Seoul] ft_printf

seheo·2022년 6월 26일
0

42Seoul

목록 보기
1/3
  • 사용 테스트기

https://github.com/paulo-santana/ft_printf_tester

1. 사전 지식

  • Variable Argument(가변인자)

2. Variable Argument

가변인자는 사용할 일이 많지 않지만 printf 구현 시 필요
함수의 인자(argument)의 개수가 변하는 것을 가변인자(variable argument)라고 한다.

사용형식

[반환값 자료형] [함수이름] ([고정매개변수], ....){

}

void ft_printf(const char* format, ...){

}

stdarg.h 헤더 파일 가변 인자 처리 매크로

  • va_list: 가변 인자 목록. 가변 인자의 메모리 주소를 저장하는 포인터입니다.
  • va_start: 가변 인자를 가져올 수 있도록 포인터를 설정합니다.
  • va_arg: 가변 인자 포인터에서 특정 자료형 크기만큼 값을 가져옵니다.
  • va_end: 가변 인자 처리가 끝났을 때 포인터를 NULL로 초기화합니다.

3. 문제 이해


prinft format 형식 태그

📖 [flag] [width] [.precision(정밀도)] [length] 서식 문자(specifier)

이 과제에서 서식문자 c, s, p, d, i, u, x, X, %를 구현
길이(length) 구현 할 필요 없음

dint값을 부호있는 10진수로 출력
iint값을 부호있는 10진수로 출력
uint값을 부호없는 10진수로 출력
cint 형으로 들어온 문자 출력
s문자열 출력
p포인터값을 16진수로 출력
xint값을 부호없는 16진수로 출력 10~15은 'a'~'f'로 표시
Xint값을 부호없는 16진수로 출력 10~15은 'A'~'F'로 표시
%%출력

specifier 별 flag

‘-’‘0’‘#’‘ ’‘+’
cOO사용안함사용안함사용안함
sO사용안함사용안함사용안함사용안함
pO사용안함사용안함사용안함사용안함
dOO사용안함OO
iOO사용안함OO
uOO사용안함사용안함사용안함
xOOO사용안함사용안함
XOOO사용안함사용안함
%OO사용안함사용안함사용안함

specifier 별 길이

Bouns

flag #, (공백), + 구현
정밀도 . 구현

"# +" 플래그를 구현하시오

  • '#' = 부호 없는 8, 16진수의 앞에 0, 0x를 붙여줍니다.
  • ' ' = 한 칸 띄어서 출력합니다. (앞에 '+' 같은 플래그 들이 있다면 무시된다.)
  • '+' = 양수라면 + 기호를 붙여줍니다.

다음 플래그들의 조합 (any combination) 을 구현하세요 : '-0.', 그리고 각 서식 지정자별 최소 폭

  • '-' = 왼쪽으로 정렬시켜 줍니다.
  • '0' = 왼쪽 빈 공간을 0으로 채워줍니다.

'(공백)', '0' 등의 플래그는 '-' 플래그를 만나면 무시됩니다.

  • '.' = 정밀도 옵션, 부동 소수점을 가진 옵션들과 주로 사용되며, 너비를 결정해줍니다.

너비가 더 크다면, 왼쪽에 그 만큼 공백이 생기고,원래 숫자의 소숫점 밑의 수보다 크면, 오른 쪽을 0으로 채웁니다.

Flow Chart

참고자료

ft_printf정리 : https://velog.io/@hkh406/ftprintf-정리

C언어 코딩 도장 : https://dojang.io/mod/page/view.php?id=577

42서울 카뎃 printf 정리 : https://kirkim.github.io/42seoul/2021/03/03/a_formatted.html

42Seoul Slack

0개의 댓글