printf() 함수
정의
- 여러 종류의 자료를 지정된 양식으로 출력하는 함수
- print formatted 즉, “양식 지정 출력 함수” 이다. (function이 아니다.)
형식
1
2
| // 기본적인 형식
printf("출력양식");
|
1
2
| // 변수, 상수나 수식의 결과값을 받아 함께 출력하는 경우
printf("출력양식", 수식1[, 수식2, 수식3, ...]);
|
| 구분 |
설명 |
| 출력양식 |
- 출력할 내용을 문자열 형태로 표현한 것. - 수식을 함께 출력하는 경우, 이를 문자열 형태로 변환하는 양식 변환기호를 포함해야 함 |
| 수식 |
- 수식 뿐 아니라 변수, 계산식, 함수, 상수값을 포함. - 문자, 정수, 실수 등의 값을 담고 있거나 리턴하는 무언가면 된다. |
예시
1
2
3
4
5
6
7
8
9
| void printf_test(){
int a = 66;
char c = 66;
char* s = "문자열 입니다.";
printf("단순히 문자열만을 출력하는 경우\n");
printf("%c 의 ASCII 코드값은 %d\n", c, c);
printf("정수를 표현할 때에는 %%d를 사용하여 표현한다. : %d\n", a);
printf("문자열은 %%s 라는 양식 변환 기호를 사용한다 : %s\n", s);
}
|
1
2
3
4
5
| # 출력
단순히 문자열만을 출력하는 경우
B 의 ASCII 코드값은 66
정수를 표현할 때에는 %d를 사용하여 표현한다. : 66
문자열은 %s 라는 양식 변환 기호를 사용한다 : 문자열 입니다.
|
출력 양식
모아보기
| 구분 |
변환기호 |
영문 |
설명 |
예시 |
| 정수형 |
%d |
decimal |
부호 있는 10진 정수(signed)로 변환해 출력 |
|
| 정수형 |
%u |
unsigned |
부호 없는 10진 정수로(unsigned) 변환해 출력 |
|
| 정수형 |
%o |
octal |
부호 없는 8진수로 변환해 출력 |
|
| 정수형 |
%x, %X |
hexa-decimal |
부호 없는 16진수로 변환해 출력 |
|
| 정수형 |
h |
short |
short int 를 출력한다. |
%hd |
| 정수형 |
l |
long |
long int 를 출력한다. |
%ld |
| 정수형 |
ll |
long long |
long long int 를 출력한다. |
%llX |
| 정수형 |
# |
|
8진수, 16진수를 그들의 양식대로 출력한다. |
#o |
| 문자형 |
%c |
character |
한 개의 문자를 출력한다. |
|
| 문자열형 |
%s |
string |
널 문자 \0로 끝나는 문자열을 출력한다. |
|
| 실수형 |
%f |
float |
소수점 형식으로 변환하여 출력한다. 소수점 위로는 1자리, 소수점 아래로는 6자리까지 출력됨. |
|
| 실수형 |
%e, %E |
exponent |
지수 형식으로 변환하여 출력한다. 소수점 위로는 1자리, 소수점 아래로는 6자리까지 출력됨. |
|
| 실수형 |
%g, %G |
general |
소수점 형식 또는 지수 형식 중 간결한 형식으로 출력한다. |
|
| 실수형 |
%L |
long double |
long double 형 데이터를 표현한다. |
%Le |
| 양식변환 |
%- |
|
좌측 정렬 (기본은 우측정렬임) |
|
| 양식변환 |
%+ |
|
부호 출력 |
|
| 양식변환 |
% |
|
부호 자리 확보 |
|
| 양식변환 |
%0 |
|
앞의 빈 자리를 0으로 채움 |
|
| 양식변환 |
%[정수].정수f |
|
소수점 이하 표현 자릿수 |
|
| 양식변환 |
%0이외의정수 |
|
출력할 자릿수 |
|
정수
대상
- 정수 자료형 : short, int, long, long long
양식 변환 기호
| 변환기호 |
영문 |
설명 |
%d |
decimal |
부호 있는 10진 정수(signed)로 변환해 출력 |
%u |
unsigned |
부호 없는 10진 정수로(unsigned) 변환해 출력 |
%o |
octal |
부호 없는 8진수로 변환해 출력 |
%x, %X |
hexa-decimal |
부호 없는 16진수로 변환해 출력 |
추가 양식 변환 기호
| 추가기호 |
영문 |
설명 |
예시 |
h |
short |
short int 를 출력한다. |
%hd |
l |
long |
long int 를 출력한다. |
%ld |
ll |
long long |
long long int 를 출력한다. |
%llX |
# |
|
8진수, 16진수를 그들의 양식대로 출력한다. |
#o |
예시
1
2
3
4
5
6
7
8
9
10
11
12
13
| void int_printf(){
// 변환기호
int ten = -10;
printf("10진수 -10을 10진수로 출력하면 : %d\n", ten);
printf("10진수 -10을 부호 없는 10진수로 출력하면 : %u\n", ten);
printf("10진수 -10을 부호 없는 8진수로 출력하면 : %#o\n", ten);
printf("10진수 -10을 부호 없는 16진수로 출력하면 : %#x\n", ten);
printf("10진수 -10을 부호 없는 16진수로 출력하면 : %#X\n", ten);
printf("10진수 -10을 부호 없는 short int로 출력하면 : %hu\n", ten);
printf("10진수 -10을 부호 없는 long int로 출력하면 : %lu\n", ten);
// 수식 또는 함수 등을 함께 넣을 수도 있다.
printf("10 + 20 의 결과는 16진수로 %#X 입니다.", 10 + 20);
}
|
1
2
3
4
5
6
7
8
9
| # 출력
10진수 -10을 10진수로 출력하면 : -10
10진수 -10을 부호 없는 10진수로 출력하면 : 4294967286
10진수 -10을 부호 없는 8진수로 출력하면 : 037777777766
10진수 -10을 부호 없는 16진수로 출력하면 : 0xfffffff6
10진수 -10을 부호 없는 16진수로 출력하면 : 0XFFFFFFF6
10진수 -10을 부호 없는 short int로 출력하면 : 65526
10진수 -10을 부호 없는 long int로 출력하면 : 4294967286
10 + 20 의 결과는 16진수로 0X1E 입니다.
|
문자
대상
양식 변환 기호
| 변환기호 |
영문 |
설명 |
%c |
character |
한 개의 문자를 출력한다. |
예시
1
2
3
4
5
6
7
8
| void char_printf(){
// 양식 변환 기호 테스트
printf("%c\n", 'A');
printf("%c\n", 65);
// 비정상적인 경우
printf("%c\n", "한 문자가 아닌 문자열이 들어가는 경우");
printf("%c\n", 1545348573);
}
|
문자열
대상
양식 변환 기호
| 변환기호 |
영문 |
설명 |
%s |
string |
널 문자 \0로 끝나는 문자열을 출력한다. |
예시
1
2
3
4
5
6
| void string_printf(){
printf("%s\n", "기본적인 문자열 출력");
printf("%s\n", "중간에 널값이 \0 들어간 문자열");
// printf("%s\n", 'r'); // 정상적으로 작동하지 않음
// printf("%s\n", 123); // 정상적으로 작동하지 않음
}
|
1
2
3
| # 출력
기본적인 문자열 출력
중간에 널값이
|
실수
대상
- 실수 : float, double, (long double)
양식 변환 기호
| 변환기호 |
영문 |
설명 |
%f |
float |
소수점 형식으로 변환하여 출력한다. 소수점 위로는 1자리, 소수점 아래로는 6자리까지 출력됨. |
%e, %E |
exponent |
지수 형식으로 변환하여 출력한다. 소수점 위로는 1자리, 소수점 아래로는 6자리까지 출력됨. |
%g, %G |
general |
소수점 형식 또는 지수 형식 중 간결한 형식으로 출력한다. |
- 실수는 모두
double형 기준으로 변환되어 출력된다.
%f, %e, %E, %g, %G 는 소수점 위로 1자리, 소수점 아래로 6자리가 출력되며, 7번째 자리에서 반올림된다.
추가적인 양식 변환 기호
| 변환기호 |
영문 |
설명 |
예시 |
%L |
long double |
long double 형 데이터를 표현한다. |
%Le |
예시
1
2
3
4
5
6
7
8
| void float_printf(){
printf("%f\n", 12.34f);
printf("%f\n", 31.4e-1);
printf("%e\n", 123.45678);
printf("%E\n", 123.45678e-6);
printf("%g\n", 123.45678);
printf("%G\n", 123.45678e-6);
}
|
1
2
3
4
5
6
7
| # 출력
12.340000
3.140000
1.234568e+02 # 반올림됨
1.234568E-04
123.457
0.000123457
|
출력 양식의 편집
양식 편집 기호
| 편집 기호 |
설명 |
%- |
좌측 정렬 (기본은 우측정렬임) |
%+ |
부호 출력 |
% |
부호 자리 확보 |
%0 |
앞의 빈 자리를 0으로 채움 |
%[정수].정수f |
소수점 이하 표현 자릿수 |
%0이외의정수 |
출력할 자릿수 |
예시(1) 정수형
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| // 부호 테스트
printf("|%d| \n", 123); // |123|
printf("|%d| \n", -123); // |-123|
printf("|% d| \n", 123); // | 123|
printf("|% d| \n", -123); // |-123| (음수는 부호 자리 확보 해도 부호 출력됨)
printf("|%+d| \n", 123); // |+123|
// 자릿수
printf("|%5d| \n", 123); // | 123|
printf("|%05d| \n", 123); // |00123|
// 정렬
printf("|%5d| \n", 123); // | 123|
printf("|%-5d| \n", 123); // |123 |
printf("|%+5d| \n", 123); // | +123|
printf("|%+05d| \n", 123); // |+0123|
|
예시(2) 실수형
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| printf("|%6.1f| \n", 123.456); // | 123.5|
printf("|%2.1f| \n", 123.456); // |123.5| // 유효숫자 < 값이면, 설정값 무시하고 값에 맞춰 출력됨
printf("|%2.9f| \n", 123.456); // |123.456000000| // 상동
printf("|%07.2f| \n", 123.456); // |0123.46|
printf("|%10f| \n", 123.456); // |123.456000|
printf("|%10.1f| \n", 123.456); // | 123.5| // 소수점 앞은 전체 자리 숫자
printf("|% 10.4f| \n", 123.456); // | 123.4560| // 소수점 뒤는 소수점 아래 자리 숫자
printf("|%+10.4f| \n", 123.456); // | +123.4560|
printf("|%10.4g| \n", 123.456); // | 123.5|
// 지수형
printf("|%10.3e| \n", 123.456); // | 1.235e+02| // 총 10자리
printf("|%10.4e| \n", 123.456); // |1.2346e+02| // 총 10자리
printf("|% 10.4e| \n", 123.456); // | 1.2346e+02| // 부호자리 1개 + 10자리
printf("|%+10.4e| \n", -123.456); // |-1.2346e+02|
|
Reference
C 프로그래밍 (김형근, 곽덕훈, 정재화 공저)
C 프로그래밍 강의 (방송통신대 - 이병래)
Comments