https://eatch.dev/s/printf · 2022-07-08

printf/scanf Cheat Sheet

기본 문법

% [플래그] [최소 폭] [.정밀도] [길이] 변환 지정자
출력할 최소 글자 수 출력할 값의 타입 사용할 서식
'-': 왼쪽 정렬
'+': 부호 항상 출력
' ': 부호 자리에 공백 항상 출력
'#': C 코드와 호환되는 서식
'0': 공백 대신 0으로 출력
(정수)
*: 추가 인자로 입력
. = 0
.(정수)
.*: 추가 인자로 입력
% [*] [최대 폭] [길이] 변환 지정자
읽은 값을 버림 읽을 최대 글자 수 읽을 값의 타입 인식할 서식
(정수)

변환 지정자별 세부사항

길이 변환 지정자 공백 길이
L t z j ll l h hh hh h l ll j z t L
% 문자 % % 문자
wi i 문자 c [폭을 생략했을 경우]
문자

[폭을 입력했을 경우]
문자의 배열
널 문자를 쓰지 않음
c* wc*
wc* c* 문자열
출력하는 최대 문자 수 = 정밀도
s 문자열
공백 문자에서 멈춤
(없음) [...] 특정 문자로 이루어진 문자열
폭 = 입력받는 최대 문자 수
집합에 없는 문자에서 멈춤
컴파일러에 따라 a-z 문법 사용 가능
(없음) [^...] 특정 문자를 제외한 문자로 이루어진 문자열
폭 = 입력받는 최대 문자 수
집합에 있는 문자에서 멈춤
컴파일러에 따라 a-z 문법 사용 가능
pd sz im ll l i s c 부호 있는 10진 정수
출력하는 최소 자릿수 (기본 1) = 정밀도
d 부호 있는 10진 정수
[+-]?[0-9]+
c* s* i* l* ll* im* sz* pd*
i [0으로 시작할 경우]
부호 있는 8진 정수
%o와 같은 규칙

[0x로 시작할 경우]
부호 있는 16진 정수
%x와 같은 규칙

[나머지 경우]
부호 있는 10진 정수
%d와 같은 규칙
부호 없는 10진 정수
출력하는 최소 자릿수 (기본 1) = 정밀도
u 부호 없는 10진 정수
[+-]?[0-9]+
부호 없는 8진 정수
출력하는 최소 자릿수 (기본 1) = 정밀도
o 부호 없는 8진 정수
[+-]?[0-7]+
부호 없는 16진 정수
출력하는 최소 자릿수 (기본 1) = 정밀도
x/X 부호 없는 16진 정수
[+-]?(0x)?[0-9a-f]+
ld d d 부동소숫점
소숫점 아래 자릿수 (기본 6) = 정밀도
무한대는 inf 혹은 infinity로 변환
f/F [0x로 시작할 경우]
부동소숫점 (16진 지수)
[+-]?0x{significand}(p[+-]?[0-9]+)?
{significand}[0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+

[나머지 경우]
부동소숫점 (10진)
[+-]?{significand}(e[+-]?[0-9]+)?
{significand}[0-9]+(\.[0-9]*)?|\.[0-9]+

[이외 특수한 값]
무한대: [+-]?inf(inity)?
NaN: [+-]?nan
f* d* ld*
부동소숫점
(10진 지수 표기)
소숫점 아래 자릿수 (기본 6) = 정밀도
무한대는 inf 혹은 infinity로 변환
지수 자리는 최소 2자리
0은 지수 자리가 +00으로 출력
e/E
부동소숫점 (16진 지수 표기)
소숫점 아래 자릿수 (기본값은 자동) = 정밀도
normalized value 범위일 경우 첫 자리가 0이 아님
0은 지수 자리가 +0으로 출력
a/A
부동소숫점 (10진 알아서 표기)
0이거나 절댓값이 0.0001 이상 10^(정밀도) 미만일 경우 %f와 같은 규칙
그렇지 않을 경우 %e와 같은 규칙
최대 유효 숫자의 개수 (기본 6, 최소 1) = 정밀도
맨 뒤의 의미 없는 0을 출력하지 않음
g/G
v* 포인터
컴파일러마다 서식이 다름
p 포인터
printf의 %p와 호환되는 서식
v**
pd* sz* im* ll* l* i* s* c* 이번 호출에서 출력한 문자 수
인자 포인터가 가리키는 주소에 값을 씀
n 이번 호출에서 읽은 문자 수
인자 포인터가 가리키는 주소에 값을 씀
c* s* i* l* ll* im* sz* pd*

c = char, wc = wchar_t,
s = short, i = int, wi = wint_t, l = long, ll = long long,
im = intmax_t, sz = size_t, pd = ptrdiff_t,
f = float, d = double, ld = long double,
v = void

서식 지정자가 아닌 문자

모든 문자: 그대로 출력

공백: 0개 이상의 공백 문자를 읽은 뒤 버리기

이외 모든 문자: 정확히 일치

반환값

성공: 출력한 문자 수 (sn의 경우 버퍼 크기를 무시하고)

출력/인코딩/_s 오류: 음수

성공/매치 실패: 대입에 성공한 서식 지정자 개수 (%n*을 무시하고)

입력/_s 오류: EOF

변종

· · · printf ·
가변인자로 전달 표준 출력으로 일반 문자열
v f w _s
va_list로 전달 파일로 와이드 문자열 범위 확인 등
s
문자열로
sn
문자열로, 버퍼 크기만큼만
· · · scanf ·
가변인자로 전달 표준 입력에서 일반 문자열
v f w _s
va_list로 전달 파일에서 와이드 문자열 범위 확인 등
s
문자열에서

snwprintf, vsnwprintf는 지원하지 않음