C 출력 함수
🌿 자라는 중
목차
C의 출력 함수는 셋이다 - printf, putchar, puts. 이름을 뜯어보면 역할이 그대로 보인다: put + char(문자 하나), put + string(문자열), print + formatted(서식 붙여서). 시험은 “누가 줄바꿈을 자동으로 하는가”와 “서식 지정자가 뭘 찍는가”를 묻는다.
세 함수 비교
| 함수 | 출력 단위 | 서식 지정 | 줄바꿈 | 이름 유래 |
|---|---|---|---|---|
putchar(c) | 문자 1개 | 불가 | 직접 putchar('\n') | put + char |
puts(str) | 문자열 | 불가 | 자동 | put + string |
printf(fmt, ...) | 무엇이든 | 가능 | 직접 \n | print + formatted |
모두 #include <stdio.h> 필요. puts만 줄바꿈이 자동 → puts("Hi") = printf("Hi\n").
입력 쪽은 get - getchar(문자 1개), gets(문자열).
서식 지정자
메모리의 비트는 그대로고, 서식이 “몇 진법으로 볼지”만 결정한다.
| 서식 | 의미 | 255를 넣으면 |
|---|---|---|
%d | 10진 정수 (decimal) | 255 |
%x | 16진 소문자 (hexadecimal) | ff |
%X | 16진 대문자 | FF |
%o | 8진수 (octal) | 377 |
%u | 부호 없는 10진 | 255 |
%c | 문자 1개 (아스키로 해석) | printf("%c",65) → A |
%s | 문자열 | |
%f | 실수 (기본 소수점 6자리) | |
%e | 지수 표기 | |
%p | 주소값 | |
%% | % 문자 자체 |
진법 변환 단골 값들:
| 10진 | 16진 (%x) | 8진 (%o) |
|---|---|---|
| 8 | 8 | 10 |
| 10 | a | 12 |
| 16 | 10 | 20 |
| 26 | 1a | 32 |
| 255 | ff | 377 |
%f 자릿수 - 모자라면 0으로 채운다
printf("%f", 3.14); // 3.140000 ← 기본 6자리
printf("%.0f", 3.141); // 3
printf("%.2f", 3.14159); // 3.14
printf("%.2f", 2795.1); // 2795.10 ← 0 채움
printf("%.4f", 1.5); // 1.5000 ← 0 채움
%.Nf의 N = 소수점 아래 자릿수. 값이 짧으면 0으로 채운다 - “1.5는 그대로 1.5”라고 답하면 틀린다.
전체 폭과 정렬까지 붙으면:
printf("%5.2f|", 3.14159); // " 3.14|" 전체 5칸, 오른쪽 정렬
printf("%-8.3f|", 2.5); // "2.500 |" 왼쪽 정렬
%e 지수 표기
double v = 12345.6789;
printf("%f", v); // 12345.678900
printf("%.2f", v); // 12345.68
printf("%e", v); // 1.234568e+04
printf("%.2e", v); // 1.23e+04
e+04 = ×10⁴. 소수점 위를 한 자리로 만들고 나머지를 지수로 뺀다.
서식 ↔ 자료형 불일치는 컴파일 에러가 아니다
| 서식 | 기대 타입 |
|---|---|
%d | int |
%f | double |
%c | int (아스키로 해석) |
%s | 문자열 (포인터) |
int n = 65;
printf("%f", n); // undefined behavior (컴파일은 됨)
컴파일 에러가 안 난다는 게 함정. 문제를 풀 때는 변수 타입 → 서식 순서로 확인한다.
putchar / puts 예시
putchar('A'); // A
putchar(65); // A ← 숫자를 줘도 아스키로 해석
putchar('\n'); // 줄바꿈
char str[] = "HELLO";
putchar(str[0]); // H
putchar(str[4]); // O
putchar는 줄바꿈을 안 해서 연달아 쓰면 붙어서 나온다 (AB).
puts는 줄바꿈을 해서 연달아 쓰면 줄이 나뉜다.
정처기 포인트
- 함정 1: 줄바꿈 자동은
puts만.printf·putchar는\n을 직접 써야 한다. - 함정 2:
%.4f에 1.5를 넣으면1.5가 아니라1.5000- 0 채움. - 함정 3:
printf("%c", 65)→A. 숫자를 아스키 문자로 해석한다. - 함정 4: 255를
%x로 찍으면ff,%o로 찍으면377- 진법 변환을 시켜본다. - 함정 5:
int를%f로 찍는 코드 → “컴파일 에러”가 아니라 미정의 동작(이상한 값).
한 줄: puts만 자동 줄바꿈, 서식은 비트를 읽는 진법 선택, %.Nf는 0 채움, 타입-서식 불일치는 에러 없이 이상한 값.