[ft_printf]서식
이번 포스트는 서식 지정 출력함수에 관한 내용입니다.
1️⃣ 서식 지정(formatted) 출력함수
- C에서 출력을 논할 때 가장 기본이 되는 함수입니다.
- 서식문자열을 쓰는이유는 추가 메모리 할당없이 기존 자료형을 출력 스트림에 문자들로 출력해주기 때문입니다.
- 대표적인 서식 지정 출력함수
- printf(): 콘솔창(stdout)에 출력
- fprintf(): 스트림(stream)에 출력
- sprintf(): 문자열에 출력
자세한내용 >[C]printf & sprintf & fprintf
2️⃣ 서식 문자열 형식
%[플래그][너비][ .숫자 정밀도 | .문자열 최소/최대 출력 개수][길이]서식 지정자
- 일반적으로
%
뒤에 최대 4개까지 지정자를 지정할 수 있습니다. - 서식 지정자는 필수로 작성해야하고 나머지는 선택사항입니다.
- 반드시 위의 순서에 맞춰서 지정자를 작성해야 합니다.
3️⃣ 서식 지정자
서식 지정자 | 출력 | 예시 |
---|---|---|
c | 문자 | A |
s | 문자열 | ABC |
d | 부호있는 십진법 정수 | 65 |
u | 부호없는 십진법 정수 | 65 |
o | 부호없는 정수를 8진수(부호있으면 오버플로우되서출력) 숫자 앞에 ‘0’안 붙여줌 | 101 |
x, X | 부호없는 정수를 16진수(소문자, 대문자)로 출력 숫자 앞에 ‘0x’, ‘0X’는 안 붙여줌 | 41 |
f | 부동소수점(십진법) | 6.500000 |
e/E | 부동소수점을 지수표기법(e, E)로 출력 | 6.500000e+000 6.500000E+000 |
g, G | 부동소수점을 최대 소수점5째자리까지 (다른 지정자없을시) 간략하게출력 | 6.24343 |
p | 포인터값(주소) | 0061FECC |
4️⃣ 서식규칙 - 너비
- 정수로 작성하며 출력값이 너비보다 작으면 공백으로 출력
- 기본적으로 오른쪽 정렬
< 예시 >
int num = 65;
printf("%d\n", num);
printf("%5d\n", num);
65
5️⃣ 서식규칙 - 플래그
(1) ' - '
왼쪽으로 정렬시켜줍니다.
int num = 65;
printf("%-5d\n", num);
(2) '0'
왼쪽 빈공간을 0으로 채워줍니다.
int num = 65;
printf("%05d\n", num);
printf("%-05d\n", num);
65
(3) '+'
양수이면 +기호를 붙여 줍니다.
int num = 65;
printf("%+d\n", num);
printf("%+5d\n", num);
printf("%+05d\n", num);
+65
+0065
(4) ' '(공백)
한칸 띄어서 출력해줍니다.(여러번 공백을 줘도 한칸 적용, ‘+‘기호가 있으면 무시합니다)
int num = 65;
printf("% d\n", num);
printf("% 05d\n", num);
printf("% +05d\n", num);
0065
+0065
(5) '#'
조합 | 출력 |
---|---|
#o | 부호없는 정수(8진수)를 ‘0’을 붙여서 출력 |
#x | 부호없는 정수(16진수)를 ‘0x’를 붙여서 출력 |
#X | 부호없는 정수(16진수)를 ‘0X’를 붙여서 출력 |
int num = 65;
printf("%#o\n", num);
printf("%#x\n", num);
printf("%#X\n", num);
0x41
0X41
6️⃣ 서식규칙 - 정밀도
(1) 최소 너비 . 소수점 아랫자리 수
- 서식 지정자 ' f '와 함께 사용합니다.
- 원래 숫자의 너비(소수점 포함)보다 최소 너비가 크면 왼쪽을 공백으로 채웁니다.
- 원래 숫자의 소수점 아랫자리 수보다 소수점 아랫자리 수가 크면 오른쪽을 0으로 채웁니다.
- 기본 소수점 아랫자리 수: 6 (기존’f’서식자와 동일)
float num = 6.5; printf("%f\n", num); printf("%7.3f\n", num); printf("%2.3f\n", num);
6.500
6.500
(2) 최소 너비 . 최대 너비
- 서식 지정자 ' s '와 함께 사용합니다.
- 출력할 문자열의 길이가 최소 너비보다 작으면 왼쪽을 공백으로 채웁니다.
- 출력할 문자열의 길이가 최대 너비보다 크면 문자열을 자릅니다.(뒷 부분부터)
char string[] = "Hi, I'm kirim!"; printf("%s\n", "good"); printf("%6.8s\n", "good"); printf("%s\n", string); printf("%4.8s\n", string);
good
Hi, I'm kirim!
Hi, I'm