printf()
란 결과물을 표준 출력으로 츨력하는 함수입니다. 함수 실행에 성공했을 경우, 출력한 결과물의 길이를 반환하고 실패했을 경우 음수를 반환합니다.
int ft_print(const char *, ...)
printf()
%[$][flags][width][.precision][length modifier]conversion
ft_printf()
%[flags][width][.precision]conversion
NOTE:
ft_printf()
do not implement the buffer management of the originalprintf()
. It only handlescspdiuxX%
conversions.
원본 printf는 버퍼 매니지먼트를 해야 하나 우리의 ft_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
d
, i
, u
, x
, X
precision
은 무시되고, width
만큼 칸에 채워넣고 남은 칸에는 공백이 채워진다.#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'
}