printf란 무엇인가?

printf()란 결과물을 표준 출력으로 츨력하는 함수입니다. 함수 실행에 성공했을 경우, 출력한 결과물의 길이를 반환하고 실패했을 경우 음수를 반환합니다.

구현

int ft_print(const char *, ...)

Syntax

printf()

%[$][flags][width][.precision][length modifier]conversion

ft_printf()

%[flags][width][.precision]conversion

NOTE: ft_printf() do not implement the buffer management of the original printf(). It only handles cspdiuxX% conversions.

원본 printf는 버퍼 매니지먼트를 해야 하나 우리의 ft_printf는 하면 안됩니다. 버퍼 매니먼트가 무언인지 궁금하신 분은 여기로.

아니 그래서 printf 버퍼 관리가 뭔데...!!

규칙

우선 이 과제를 진행하면서 가장 어려운 점은 바로 규칙 찾기입니다.

flag 하나의 결과물은 예상하기 쉬운데, 다른 flag와 중첩되거나 precision 또는 width와 같이 사용되면 결과물이 예측하기 어렵습니다. 실은 답은… 하나하나 찍어보는 수밖에 없지요.

그런 어려움을 조금 줄여보고자 실은 더 많은 사람들이 printf과제를 하게 만들려고 제가 공부한 것들을 한번 공유해보고자 합니다.

flag %c %s %p %d %i %u %x %X %%
width O O O O O O O O O
precision X O X O O O O O X
- O O O O O O O O O
0 X X X O O O O O O
# X X X X X X O O X
space X X X O O X X X X
+ X X X O O X X X X

Width > Precision

#include <stdio.h>

int main(void)
{
	printf("%3.d\\n", 10);  // ' 10'
	printf("%3.i\\n", 10);  // ' 10'
	printf("%3.u\\n", 10);  // ' 10'
	printf("%3.x\\n", 10);  // '  a'
	printf("%3.X\\n", 10);  // '  A'
	printf("%#3.x\\n", 10); // '0xa'
	printf("%#3.X\\n", 10); // '0XA'
}