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);
}
1
2
3
4
5
# 출력
A
A

?

문자열

대상

  • 문자열 (char*)

양식 변환 기호

변환기호 영문 설명
%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