42Seoul/Printf

[C] printf() 구현하기 (2) - format

  • -
728x90

format

다양한 자료형 변수를 문자열로 변환하는 방식을 지정해주는 형식 문자열(format string)인 문자열 변수를 받아들인다.

 

형식 지정자 설명
d,i 부호 있는 10진 정수
u 부호 없는 10진 정수
o 부호 없는 8진 정수
x 부호 없는 16진 정수(소문자)
X 부호 없는 16진 정수(대문자)
f 실수를 소수점으로 표기(소문자)
F 실수를 소수점으로 표기(대문자)
e 실수 지수 표기법 사용(소문자)
E 실수 지수 표기법 사용(대문자)
g %f와 %e 중에서 짧은 것을 사용(소문자)
G %F와 %E 중에서 짧은 것을 사용(대문자)
a 실수를 16진법으로 표기(소문자)
A 실수를 16진법으로 표기(대문자)
c 문자
s 문자열
p 포인터의 메모리 주소
n %n 부분에 int 포인터를 넣으면 지금 까지 출력한 문자 개수를 변수에 넣어줌
% % 기호 출력

 

flag

출력되는 형태에 대해 좀 더 세밀하게 지정할 수 있게 해준다.

flag 설명
- 왼쪽 정렬
+ 양수일 때는 + 부호, 음수일 때는 - 부호 출력
space(공백) 양수일 때는 부호를 출력하지 않고 공백으로 표시, 음수 일 때는 - 부호 출력
# 진법에 맞게 숫자 앞에 0, 0x, 0X를 붙임
숫자(width) 지정한 숫자만큼 폭을 지정하여 출력, 실수는 . (점), e+까지 폭에 포함됨
.숫자(precision) 지정한 숫자만큼 소수점 아래 자리 출력
0 출력하는 폭의 남는 공간에 0으로 채움

width (폭)

- 출력할 값의 최소 너비를 정한다.

- 출력할 값이 지정한 폭보다 작으면 자릿수를 맞추기 위해 0을 채워넣는다.

- 출력할 값이 지정한 폭보다 크면, 값이 잘리면 안되기 때문에 width 옵션은 무시된다.

- width에 음수가 할당되면 `-`플래그 + `width`로 간주한다.

 

폭을 지정하는 방법

1. [숫자] : % 뒤에 나오는 10진수 숫자가 곧 지정한 폭이 된다.

2. [*] : 숫자 와일드카드. 가변인자로 폭을 지정한다.

주의할점은, 필드의 폭을 지정할 때 1번처럼 변환 문자 앞에 숫자로 적던지, * 와일드 카드를 인수로 받던지 둘 중 하나만 가능

 

precision (정밀도)

  • 출력할 값의 정확도를 위한 자릿수를 설정한다. 즉, 몇 자리까지 출력해야 된는지.

  • 꼭 앞에 마침표(.) 를 찍어야 한다. 폭과 구분하기 위해서.

  • 형식 문자열에서 정밀도를 나타내지는 않지만 뒤에 인자로 정밀도 값을 준다. 이 때 인자는 형식 태그가 적용되는 데이타 앞에 있어야 한다.

  • 출력할 값이 정수(d, i)일 때

    최대 자릿수를 맞추기 위해 0을 추가한다. 자릿수가 출력할 값보다 작을 경우에는 정밀도 옵션을 무시한다.

  • 출력할 값이 실수일 때

    소수점 이하의 최대 자릿수를 가리키고, 자릿수에 따라 반올림이 되거나 소수점 이하에 0이 추가된다. 실수 전체의 자릿수 설정은 width옵션을 사용한다.

  • 정밀도에 음수가 할당되면 무시한다.

  • 정밀도가 정밀도이면서 동시에 서식지정자인 경우 ... X

 

참 조 : 
https://velog.io/@hidaehyunlee/%ED%98%95%EC%8B%9D%ED%83%9C%EA%B7%B8%EC%99%80-%EC%84%9C%EC%8B%9D%EC%A7%80%EC%A0%95%EC%9E%90-printf-%ED%95%A8%EC%88%98%EC%9D%98-%EC%98%B5%EC%85%98-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0
728x90
300x250
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.