티스토리 뷰
- 프로토타입
int ft_printf(const char *format, ...)
- 형식 구조
%[플래그][폭][.정밀도]서식지정자
(앞으로 폭은 width, 정밀도는 precision이라고 칭한다, [플래그][폭][.정밀도]를 합쳐서 플래그라고 칭할 수도 있다.)
- 기본 서식 지정자
* mandatory : cspdiuxX%
%c | 문자 |
%s | 문자열 |
%p | 포인터의 메모리 주소, 리눅스, OS X에서는 앞에 0x가 붙고, A~F는 소문자로 출력, 높은 자릿수의 0은 생략 |
%d | 부호가 있는 10진 정수 |
%i | 부호가 있는 10진 정수 |
%u | 부호가 없는 10진 정수 |
%x | 부호가 없는 16진 정수(소문자) |
%X | 부호가 없는 16진 정수(대문자) |
%% | %기호 출력 |
- 플래그
* mandatory : -0.*
- | 왼쪽 정렬 |
0 | 출력하는 폭의 남는 공간에 0으로 채움, '-'플래그와 동시 사용 불가, '-'플래그의 우선순위가 더 높음 |
. | '.'뒤에 나오는 숫자가 precision, precision은 출력되는 숫자의 최소길이(%s에서는 최대길이) |
* | width자리나 precision자리에 들어가서 wildcard로 쓰임, va_arg(ap, int)를 통해 입력해준 값 받아옴 |
- ft_printf 구현 순서(추천)
형식구조 이해 => width, precision, 플래그 파싱 =>
형식 지정자마다의 width/precision/strlen 관계 정리 => (width)%csdiuxXp 순서로 구현
이 순서를 추천하는 이유
형식구조를 이해하면 플래그 => width => precision 순서로 나오는 것을 알게 된다. 이에 맞춰서 파싱해준다. (init 필수)
제대로 파싱되었는지 확인해보고 그다음 각 형식 지정자 마다 width/precision/strlen의 관계를 알아본다. diuxXp에서 관계는 비슷하다. s에서 특이하다.
(width)%csdiuxXp 순서로 구현하는 이유:
width는 계속해서 쓰인다. %는 간단하다. c도 간단하다. s도 precision을 고려해야되지만 간단한 편이다.
int형(d == i) 먼저 구현하면 다른 숫자들도 어느정도 틀이 비슷하기 때문에 int 먼저 구현한다.
unsigned int는 int와 같은 10진수, int에서 조금만 바꾸면 되니까 그다음에 구현한다.
16진수 hexadecimal (x, X)는 x를 만들고 거기에 ft_toupper로 X를 구현하는게 좋다.
소문자로 출력되면 pointer출력에 편하다.
- width/precision/strlen의 관계 (숫자에서)
width : 출력되는 최소 길이 (부호, 숫자, precision 포함)
precision : 숫자의 최소 길이 (부호 미포함)
strlen : 숫자의 길이(부호 미포함)
- Test tool
mandatory만 가능 + 형식 지정자 별로 확인 가능 + 제일 느슨한 테스트 툴 (이걸 먼저 돌려보기)
bonus까지 확인 가능 + 형식 지정자 별로 확인 가능+undefined 테스트가 많음
github.com/charMstr/printf_lover_v2
bonus까지 확인 가능 + 형식 지정자 별로 확인 가능 + 다른 테스트 툴 통과해도 이거 통과 못하면 KO 뜨는 경우 있다고함
github.com/Mazoise/42TESTERS-PRINTF
mandatory만 가능 + 형식 지정자를 섞어서 테스트하는게 많아서 모두 구현하고 마지막에 돌려보는게 나음
'42Seoul > 42cursus' 카테고리의 다른 글
[cub3d] 차근차근 시작하기 (0) | 2020.11.07 |
---|---|
[ft_server] subject에서 모르는 단어 찾아보기 (0) | 2020.09.15 |
- Total
- Today
- Yesterday
- CS50
- Python
- 코딩뉴비챌린지
- 드림코딩by엘리
- C++
- 백준
- 멋쟁이사자처럼
- 42cursus
- 컴퓨터과학
- 코린이의 성장일기
- printf
- codeforces
- 42서울
- github
- 자바스크립트
- 알고리즘
- ft_server
- BOJ
- 멋쟁이사자처럼9기
- 부스트코딩뉴비챌린지
- ES6
- 코린이
- django
- 코드포스
- 42seoul
- 부스트코스
- ft_printf
- git
- 네이버커넥트재단
- 드림코딩
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |