..

Search

5) printf() 함수

5) printf() 함수

printf() 함수


C언어 표준 입출력 함수

사용자가 프로그램과 대화하기 위해 사용하는 함수를 입출력 함수 또는 I/O 함수라고 합니다.

printf() 함수와 scanf() 함수는 C언어 표준 입출력 함수 중에서도 가장 많이 사용되는 대표적인 입출력 함수입니다.


printf() 함수

printf() 함수는 C언어의 표준 출력 함수로, 여러 종류의 데이터(data)를 다양한 서식에 맞춰 출력할 수 있게 해줍니다.

printf() 함수의 원형은 다음과 같습니다.

함수 원형

#include <stdio.h>

int printf(const char * restrict format, ...);

 

printf() 함수의 f는 formatted의 약자이며, 서식화된 출력을 지원한다는 의미입니다.

이 함수는 출력할 데이터를 어떤 서식에 맞춰 출력할지 서식 지정자(format specifier)를 통해 직접 지정할 수 있습니다.

 

예제

 

printf("printf() 함수는 서식 지정자를 통해 출력할 데이터의 서식을 지정할 수 있어요!\n");

printf("변수에 저장된 숫자는 %d입니다.", 10);

 

코딩연습 ▶

실행 결과

printf() 함수는 서식 지정자를 통해 출력할 데이터의 서식을 지정할 수 있어요!

변수에 저장된 숫자는 10입니다.

 

위의 예제에서는 int형 데이터를 나타내기 위해서 '%d'라는 서식 지정자를 사용했습니다.

또한, 줄 바꿈은 '\n'라는 이스케이프 시퀀스를 사용하여 표현하고 있습니다.


이스케이프 시퀀스(escape sequence)

앞선 예제의 첫 번째 printf() 함수에 나온 '\n'과 같은 문자를 이스케이프 시퀀스(escape sequence)라고 합니다.
이러한 이스케이프 시퀀스는 프로그램의 결과가 화면에 출력될 때 사용하게 될 특수한 문자를 위해 만들어졌습니다.

 

C언어에서 사용되는 이스케이프 시퀀스는 다음과 같습니다.

이스케이프 시퀀스 출력 내용
\' 작은따옴표
\" 큰따옴표
\? 물음표
\\ 백슬래시(\)
\a 경고음 발생
\b 백스페이스(backspace)
\n 줄 바꿈(new line)
\r 캐리지 리턴(carriage return)
\t 수평 탭(tab)
\v 수직 탭(tab)
\f 폼 피드(form feed)

 

이스케이프 시퀀스 중에서 '\f'와 '\v'는 프린터로 출력할 때에만 의미를 가집니다.

 

예제

 

printf("C언어에서 사용하는 \"특수 문자\"에는 여러가지가 있습니다.\n");

printf("\t특수 문자의 바로 앞에는 언제나 \\가 와야 합니다.");

 

코딩연습 ▶

실행 결과

C언어에서 사용하는 "특수 문자"에는 여러가지가 있습니다.
    특수 문자의 바로 앞에는 언제나 \가 와야 합니다.


서식 지정자(format specifier)

앞선 예제에서 두 번째 printf() 함수에 나온 '%d'와 같은 문자를 서식 지정자(format specifier)라고 합니다.

printf() 함수에서는 이러한 서식 지정자를 통해 출력할 데이터의 서식을 사용자가 직접 지정할 수 있습니다.

 

C언어에서 사용되는 대표적인 서식 지정자는 다음과 같습니다.

서식 지정자 출력 데이터 형태
%c 하나의 문자
%s 문자열
%d 부호 있는 10진 정수
%i 부호 있는 10진 정수 (%d와 동일)
%f 고정 소수점으로 표현한 실수 (소수점 이하 6자리까지 표현)
%o 부호 없는 8진 정수
%u 부호 없는 10진 정수
%x 부호 없는 16진 정수 (소문자 사용)
%X 부호 없는 16진 정수 (대문자 사용)
%e 부동 소수점으로 표현한 실수 (e-표기법)
%E 부동 소수점으로 표현한 실수 (E-표기법)
%g 값에 따라 %f나 %e를 사용함.
%G 값에 따라 %f나 %E를 사용함.
%% 퍼센트(%) 기호 출력

 

예제

printf("%%c를 사용한 결과 : %c\n", 'a');            // 문자

printf("%%s를 사용한 결과 : %s\n", "즐거운 C언어"); // 문자열  

 

printf("%%f를 사용한 결과 : %f\n", 0.123456);

printf("%%f를 사용한 결과 : %f\n", 0.123456789);    // 소수점 6자리까지만 표현  

 

printf("%%o를 사용한 결과 : %o\n", 123);            // 8진 정수

printf("%%x를 사용한 결과 : %x\n", 123);            // 16진 정수  

 

printf("%%g를 사용한 결과 : %g\n", 0.001234);       // 값에 따라 %f나 %e

printf("%%g를 사용한 결과 : %g\n", 0.00001234);     // 값에 따라 %f나 %e

printf("%%G를 사용한 결과 : %G\n", 0.000001234);    // 값에 따라 %f나 %E

코딩연습 ▶

실행 결과

%c를 사용한 결과 : a

%s를 사용한 결과 : 즐거운 C언어

%f를 사용한 결과 : 0.123456

%f를 사용한 결과 : 0.123457

%o를 사용한 결과 : 173

%x를 사용한 결과 : 7b

%g를 사용한 결과 : 0.001234

%g를 사용한 결과 : 1.234e-05

%G를 사용한 결과 : 1.234E-06


서식 지정자의 동시 사용

여러 개의 서식 지정자를 동시에 사용하여, 여러 개의 데이터에 서로 다른 서식을 지정해 출력할 수 있습니다.

단, 이때 서식 지정자의 순서와 타입은 출력할 데이터의 순서와 타입과 반드시 일치해야 합니다.

예제

 

printf("저장된 정수는 %d이며, 저장된 문자열은 %s입니다.\n", 123, "C언어");

 

코딩연습 ▶

실행 결과

저장된 정수는 123이며, 저장된 문자열은 C언어입니다.


출력 필드의 폭 설정

서식 지정자의 '%'기호와 타입을 나타내는 영문자 사이에 숫자를 추가하여 출력되는 필드의 폭을 직접 설정할 수 있습니다.

 

내부의 숫자는 오른쪽 정렬이 기본이며, 숫자 앞에 '-'기호를 붙이면 왼쪽 정렬로 변경됩니다.

또한, 숫자 앞에 '+'기호를 붙이면 숫자를 오른쪽 정렬한 상태에서 양수에는 '+'기호를, 음수에는 '-'기호를 붙여서 출력합니다.

이때 소수 부분의 숫자는 출력되는 소수의 자릿수를 명시합니다.

예제

printf(" %%d를 사용한 결과 : |%d|\n", 123);

printf(" %%7d를 사용한 결과 : |%7d|\n", 123);

printf(" %%+7d를 사용한 결과 : |%+7d|\n", 123);

printf(" %%-7d를 사용한 결과 : |%-7d|\n\n", 123);

 

printf(" %%f를 사용한 결과 : |%f|\n", 1.23);

printf(" %%.1f를 사용한 결과 : |%.1f|\n", 1.23);

printf(" %%7.2f를 사용한 결과 : |%7.2f|\n", 1.23);

printf("%%+7.2f를 사용한 결과 : |%+7.2f|\n", 1.23);

printf("%%-7.2f를 사용한 결과 : |%-7.2f|\n\n", 1.23);

코딩연습 ▶

실행 결과

    %d를 사용한 결과 : |123|

   %7d를 사용한 결과 : |    123|

  %+7d를 사용한 결과 : |   +123|

  %-7d를 사용한 결과 : |123    |

 

    %f를 사용한 결과 : |1.230000|

  %.1f를 사용한 결과 : |1.2|

 %7.2f를 사용한 결과 : |   1.23|

%+7.2f를 사용한 결과 : |  +1.23|

%-7.2f를 사용한 결과 : |1.23   |


연습문제