gyumin.log

C 출력 함수

🌿 자라는 중

목차

C의 출력 함수는 셋이다 - printf, putchar, puts. 이름을 뜯어보면 역할이 그대로 보인다: put + char(문자 하나), put + string(문자열), print + formatted(서식 붙여서). 시험은 “누가 줄바꿈을 자동으로 하는가”와 “서식 지정자가 뭘 찍는가”를 묻는다.

세 함수 비교

함수출력 단위서식 지정줄바꿈이름 유래
putchar(c)문자 1개불가직접 putchar('\n')put + char
puts(str)문자열불가자동put + string
printf(fmt, ...)무엇이든가능직접 \nprint + formatted

모두 #include <stdio.h> 필요. puts만 줄바꿈이 자동 → puts("Hi") = printf("Hi\n"). 입력 쪽은 get - getchar(문자 1개), gets(문자열).

서식 지정자

메모리의 비트는 그대로고, 서식이 “몇 진법으로 볼지”만 결정한다.

서식의미255를 넣으면
%d10진 정수 (decimal)255
%x16진 소문자 (hexadecimal)ff
%X16진 대문자FF
%o8진수 (octal)377
%u부호 없는 10진255
%c문자 1개 (아스키로 해석)printf("%c",65)A
%s문자열
%f실수 (기본 소수점 6자리)
%e지수 표기
%p주소값
%%% 문자 자체

진법 변환 단골 값들:

10진16진 (%x)8진 (%o)
8810
10a12
161020
261a32
255ff377

%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⁴. 소수점 위를 한 자리로 만들고 나머지를 지수로 뺀다.

서식 ↔ 자료형 불일치는 컴파일 에러가 아니다

서식기대 타입
%dint
%fdouble
%cint (아스키로 해석)
%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 채움, 타입-서식 불일치는 에러 없이 이상한 값.

연결되는 것들

  • %c%d가 같은 값을 다르게 보여주는 이유 - char는 정수라서 → C 자료형
  • 찍기 전에 변수에 값이 제대로 들어갔는지부터 - 쓰레기값 주의 → 변수 초기화