dot
은 printf 형식태그 중에서 정밀도에 쓰이는 점(.)입니다.pre
는 정밀도 숫자 값 입니다.^
는 공백 1칸입니다.인자
는 printf에 넘겨주는 정수를 말합니다. (해당 포스트는 서식지정자 %d
, %i
에 대해서만 다룹니다.)ex. printf("%5.d", 123); → (%.5d, 123)
ex. printf("%5.d", 123); printf("%5.0d", 123); printf("%5.-2d", 123); printf(%5.*d, -2, 9);
9^
^^^10
, (%5.0d, 10) : ^^^10
[pre가 음수] pre를 무시하고 나머지 형식태그 적용하여 인자를 출력
👉 ex.(%5.*d, -2, 9) : ^^^^9
[pre가 0] pre를 무시하고 나머지 형식태그 적용하여 인자를 출력
👉 ex.(%5.*d, 0, 10) : ^^^10
[pre가 X] 인자 개수가 맞지 않으므로 처리할 필요X
ex. printf("%5.d", 0); printf("%5.0d", 0); printf("%5.-2d", 0); printf(%5.*d, -2, 0);
^^
, (%05.-2d, 0) : ^^
, (%-5.-2d, 0) : ^^
^^^^^
, (%5.d, 0) : ^^^^^
, (%1.d, 0) : ^
, (%1.0d, 0) : ^
, (%.d, 0) : 출력X
, (%.0d, 0) : 출력X
[pre가 음수] pre를 무시하고 나머지 형식태그 적용하여 인자를 출력
👉 ex.(%5.*d, -2, 0) : ^^^^0
, (%-5.*d, -2, 0) : 0^^^^
, (%05.*d, -2, 0) : 00000
, (%.*d, -2, 0) : 0
[pre가 0] (예외 발생) 인자인 0을 출력하지 않음. 1-(2)번과 동일한 규칙 (pre를 무시하고 width만 적용하여 공백 출력)
👉 ex.(%5.*d, 0, 0) : ^^^^^
, (%-5.*d, 0, 0) : ^^^^^
, (%05.*d, 0, 0) : ^^^^^
[pre가 X] 인자 개수가 맞지 않아서 이상한 값이 찍힘. 처리할 필요X
평소의 정밀도(precision) 규칙대로 적용된다.
(1) pre를 숫자로 받음
👉 (%.5d, 0) : 00000
, (%7.5d, 0) : ^^00000
, (%-7.5d, 0) : 00000^^
, (%07.5d, 0) : ^^00000
(2) pre를 '*' 인자로 받음
👉 (%.*d, 5, 0) : 00000
, (%7.*d, 5, 0) : ^^00000
, (%-7.*d, 5, 0) : 00000^^
, (%07.*d, 5, 0) : ^^00000
(dot == 0) and (인자 == 0) and (width > 0)
vs (dot == 1) and (pre X or pre == 0) and (인자 == 0)👉 printf("%5d", 0); vs printf("%5.d", 0);
전자는 플래그 정상 작동 = 인자 0을 출력
👉 (%5d, 0) : ^^^^0
, (%1d, 0) : 0
후자는 위에서 설명한 2-(1)번에 해당하는 case. (pre를 무시하고 width만 적용하여 공백 출력)
👉 (%5.d, 0) : ^^^^^
전자와 후자의 차이점
전자는 dot(.)을 찍었는데 정밀도가 없는거고, 후자는 dot(.)이 아예 등장X.
전자는 무조건 인자 0을 출력하고, 후자는 인자 0을 출력하지 않는 경우도 있다.
✅ 오탈자, 틀린 부분이 있거나 궁금한 점이 있다면 편하게 댓글 남겨주세요! 🙂