C언어 출력 함수 - putchar, printf, puts
선수학습(1개)
요약
C언어의 출력 함수 putchar, printf, puts의 사용법과 차이점을 알아봅니다. 서식 지정자(%d, %s, %c, %f, %.2f)와 소수점 자릿수 지정, putchar의 동작 원리를 정보처리기사 실기 대비 핵심 내용으로 정리합니다.
출력 함수 핵심 정리
| 함수 | 설명 | 사용법 | 출력 |
|---|---|---|---|
putchar(c) | 문자 한 개 출력 | putchar('A'); | A |
printf(fmt, ...) | 서식 지정하여 출력 | printf("%d", 10); | 10 |
puts(str) | 문자열 출력 + 자동 줄바꿈 | puts("Hi"); | Hi + 줄바꿈 |
세 함수 모두 stdio.h 헤더에 선언되어 있으므로 #include <stdio.h>가 필요합니다.
함수 이름의 의미
C 표준 라이브러리에서는 출력 함수에 put(내보내다), 입력 함수에 get(가져오다)을 관례적으로 사용합니다.
| 함수 | 이름 유래 | 의미 |
|---|---|---|
putchar | put + character | 문자 하나를 출력 |
puts | put + string | 문자열을 출력 |
printf | print + formatted | 서식을 지정하여 출력 |
getchar | get + character | 문자 하나를 입력 |
gets | get + string | 문자열을 입력 |
printf() - 서식 지정 출력 쌩기초
출력이란?
프로그램이 실행한 결과를 화면에 보여주는 것을 출력이라고 합니다.

정보처리기사 실기 코딩 문제는 "다음 코드의 실행 결과(출력)를 쓰시오" 형태로 출제됩니다. 즉, 코드가 화면에 무엇을 출력하는지 알아내야 합니다.
C언어에서 화면에 출력할 때 가장 많이 사용하는 것이 printf()입니다.
printf의 기본 구조
printf()는 큰따옴표(" ") 안에 적은 내용을 그대로 화면에 출력합니다.
숫자나 변수의 값을 함께 출력하고 싶을 때는 서식 지정자를 사용합니다. 서식 지정자란 "여기에 값이 들어갈 자리" 를 표시하는 기호입니다.

위 코드를 분해하면:
| 부분 | 역할 |
|---|---|
"나이: %d세" | 출력할 틀 (큰따옴표로 감쌈) |
%d | "여기에 정수가 들어갈 거야"라는 표시 |
, | 틀과 값을 구분하는 쉼표 |
25 | %d 자리에 들어갈 실제 값 |
결과적으로 %d 자리에 25가 들어가서 나이: 25세가 출력됩니다.
\n - 줄바꿈
\n은 줄바꿈 기호입니다. printf는 자동으로 줄을 바꾸지 않으므로, 줄을 바꾸고 싶으면 \n을 직접 넣어야 합니다.
\n 없이 출력 — 두 줄이 붙어서 나옴:
\n으로 줄바꿈 — 각각 다른 줄에 출력:
서식 지정자
서식 지정자는 %로 시작하며, 출력할 값의 종류를 지정합니다.
작은따옴표
' '는 문자 한 개('A'), 큰따옴표" "는 문자열("Hello")을 감쌀 때 씁니다.
소수점 자릿수 지정
%f는 기본적으로 소수점 6자리까지 출력합니다. 원하는 자릿수만 출력하려면 %.Nf 형식을 사용합니다.
%f는 실수 자료형인float과double모두 출력할 수 있습니다.
.N에서 N은 소수점 아래 표시할 자릿수입니다. 지정한 자릿수보다 실제 값이 짧으면 0으로 채웁니다.
여러 값 출력
하나의 printf로 여러 값을 동시에 출력할 수 있습니다.
서식 지정자와 전달하는 값의 개수와 순서가 일치해야 합니다.
서식별 출력 비교 심화
같은 값을 어떤 서식지정자로 출력하느냐에 따라 다른 모양으로 나옵니다. 자료형의 내부 표현과 출력 서식은 별개입니다.
정수 하나, 여러 서식
정수 255를 서로 다른 서식지정자로 출력해보면 다음과 같습니다.
| 서식지정자 | 의미 | 255 출력 |
|---|---|---|
%d | 10진수 | 255 |
%x | 16진수 소문자 | ff |
%X | 16진수 대문자 | FF |
%o | 8진수 | 377 |
값은 같은 255인데 표현 진법만 바뀐 것입니다. 255라는 값은 메모리에 이진수 11111111로 저장되어 있고, 서식지정자는 이 비트를 10진수로 볼지, 16진수로 볼지, 8진수로 볼지만 결정합니다. 메모리에 저장된 비트 자체는 동일합니다.
실수 하나, 여러 서식
실수 12345.6789도 서식에 따라 표현이 달라집니다. %e로 출력하면 1.234568e+04 형태가 나오는데, 여기서 e+04는 "10의 4제곱"을 의미합니다. 즉 1.234568 × 10,000 = 12345.68입니다.
| 서식지정자 | 의미 | 12345.6789 출력 |
|---|---|---|
%f | 일반 실수 | 12345.678900 |
%.2f | 소수점 2자리 | 12345.68 |
%e | 지수 표기 | 1.234568e+04 |
%.2e | 지수 표기 + 자릿수 | 1.23e+04 |
서식과 자료형이 맞지 않으면 호기심
서식지정자는 "이 자리에 어떤 자료형 값이 들어올지"를 컴파일러에게 알리는 약속입니다. int는 4바이트, double은 8바이트로 메모리에 저장되는데, 서식지정자는 몇 바이트를 어떻게 읽을지 결정합니다. 자료형과 서식이 어긋나면 엉뚱한 비트를 읽어버립니다. 약속이 어긋나도 컴파일 에러는 나지 않지만, 실행 시 쓰레기 값이 출력되거나 프로그램이 비정상 종료될 수 있습니다.
undefined behavior(정의되지 않은 동작)란 C 표준이 결과를 보장하지 않는 상황입니다. 컴파일은 되지만 실행 결과를 예측할 수 없습니다.
%d→int를 기대%f→double을 기대%c→int를 기대 (ASCII 코드로 해석). 예:printf("%c\n", 65);는A를 출력합니다.
서식지정자를 고르기 전에 변수의 자료형을 먼저 확인해야 합니다.

추적 예제
하나의 int 값을 여러 서식으로 출력하는 실기 스타일 예제입니다.
단계별로 출력을 따라가 봅니다.
| 서식 | n = 16의 출력 |
|---|---|
%d | 16 |
%x | 10 |
%o | 20 |
최종 출력:
16은 10진수에서 16, 16진수에서 10(= 1×16 + 0), 8진수에서 20(= 2×8 + 0)입니다. 앞서 255를 여러 서식으로 출력했던 것과 같은 원리입니다. 같은 정수 값이지만 진법에 따라 표기만 다릅니다.
![값 16을 10진수 [1,6], 16진수 [1,0], 8진수 [2,0]으로 자릿수 단위로 분해하여 각 진법의 표기가 다른 이유를 보여주는 다이어그램](/_next/image?url=%2Fcoding%2Fc-language%2Foutput-functions%2Fbase-decomposition.webp&w=3840&q=75&dpl=dpl_EcZ78QVE4eKXbCcRMKFX4eWF1Eq6)
putchar() - 문자 한 개 출력 기초
putchar()는 문자(char) 하나를 화면에 출력하는 함수입니다.
putchar 예시
배열에서 putchar 사용
문자 배열의 특정 인덱스에 있는 문자를 출력할 수 있습니다.
str[0]은 'H'이므로 putchar(str[0])은 putchar('H')와 같습니다.
puts() - 문자열 출력 + 줄바꿈 기초
puts()는 문자열을 출력하고 자동으로 줄바꿈을 추가합니다.
puts vs printf 비교
두 코드의 출력 결과는 동일합니다. puts는 문자열만 출력할 수 있고, printf처럼 서식 지정은 불가능합니다.
| 구분 | puts | printf |
|---|---|---|
| 줄바꿈 | 자동 | \n 직접 추가 |
| 서식 지정 | 불가 | 가능 (%d, %s 등) |
| 사용 예 | 단순 문자열 출력 | 복잡한 형식의 출력 |
putchar vs printf 비교 기초
| 구분 | putchar | printf |
|---|---|---|
| 출력 단위 | 문자 한 개 | 문자열, 숫자 등 다양한 형식 |
| 서식 지정 | 불가 | 가능 (%d, %c, %s 등) |
| 줄바꿈 | putchar('\n') 직접 사용 | \n 직접 추가 |
| 사용 예 | putchar('A'); | printf("%c", 'A'); |
문자 한 개만 출력할 때 putchar('A')와 printf("%c", 'A')는 동일한 결과를 냅니다.