본문 바로가기
프로그래밍언어/C언어

printf() 함수 서식문자 - 숫자 출력하기(%d, %i, %x, %o, %f, %lf)

by J코딩 2021. 8. 16.
반응형

이번에는 printf()함수의 다른 기능에 대해서 알아보겠습니다. 이 함수는 print formatted에서 print에 f를 추가하여 이름을 지은 만큼 '서식화된 문자(서식 문자)'에 따라 다양한 출력 형식을 갖습니다. 그리고 표준라이브러리 함수입니다.

https://jcoding7.tistory.com/entry/C%EC%96%B8%EC%96%B4%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95-%EA%B5%AC%EC%A1%B0-%EC%A0%84%EC%B2%98%EB%A6%AC%EC%99%80-%ED%97%A4%EB%8D%94-%ED%8C%8C%EC%9D%BC

 

C언어의 기본 문법 구조 - 전처리와 헤더 파일

1번라인처럼 #include 를 보면 특수 문자 '#'이 있습니다. 이것을 전처리기라고 합니다. 전처리기란? 컴파일러가 컴파일을 수행하기 전에 먼저 처리하는 것을 의미합니다. https://jcoding7.tistory.com/entry

jcoding7.tistory.com

서식 문자란? 출력 형태를 지정해 주는 문자입니다. 예를 들어 printf() 함수를 이용한 출력 형태가 다음과 같다면,

모니터에 %d를 출력하라는 의미가 아닙니다. 뒤에 있는 3+5의 연산 결과인 8을 10진수로 출려갛라는 의미입니다.

10진수는 Decimal, 16진수는 Hexadecimal, 8진수는 Octal이며 각각 알파벳, d, x, o를 이용하여 서식 문자 %d, %x, %o를 만든 것입니다. 따라서 서식 문자 %d는 10진수, %o는 8진수, %x는 16진수를 나타냅니다.

 

printf() 함수는 단순한 메시지만을 출력시키는 것이 아닙닌다. 숫자들의 계산 결과도 출력시킬수 있고 10진수 정수, 8진수 정수 16진수 정수, 실수, 문자, 문자열 등을 출력시킬 수 있습니다. 서식 문자에 관한 자세한 내용은 다음 표에 기록되어 있으니 참고하기 바랍니다.

서식 문자 출력 형태
%d, %i 10진수 정수(양수, 음수 모두 표현 가능)
%x, %o 16진수 정수, 8진수 정수(양수, 음수 모두 표현 가능)
%f, %lf 10진수 실수(양수, 음수 모두 표현 가능)
%c 한 개의 문자
%s 문자열
%u 10진수 정수(양수만 표현 가능)
%e e 표기법에 의한 실수
%E E 표기법에 의한 실수
%g 소수점 이하 자리 수에 따라 %f, %e 둘 중 하나를 선택
%G 소수점 이하 자리 수에 따라 %f, %E 둘 중 하나를 선택
%% % 기호 출력

이해를 돕고자 간단한 예제를 작성해보겠습니다. 예제는 10진수를 서식 문자 %d와 %i로 작성한 코드입니다.

6행부터 15행까지에서 서식 문자 %d와 %i를 이용하여 10진수 정수 형태로 출력하고 있습니다. 서식 문자 %d와 %i는 양수와 음수를 모두 출력할 수 있습니다. 참고로 10진수를 표현할 때 서식 문자 %d를 주로 사용합니다.

 

다음 예제는 정수 50과 -50을 각각 서식 문자 %d(10진수), %x(16진수), %o(8진수)를 이용하여 출력하는 코드입니다.

6행에서 정수 50을 서식 문자 %d(10진수), %x(16진수), %o(8진수)로 출력하고 있습니다. 정수 50이 서식 문자 %d, %x, %o에 따라 다른 형태로 출력되고 잇다는 점을 주목하시기 바랍닌다.

 

9행에서는 정수 -50을 서식 문자 %d(10진수), %x(16진수), %o(8진수)로 출력하고 있습니다. 그런데 실행 결과는 서식 문자 %d를 제외하고 %x와 %o는 이상한 값이 나옵니다. 즉, 부호가 있는 음수는 16진수(%x)와 8진수(%o)로 표현할 수 없습니다.

 

다음 예제는 실수 0.5를 서식 문자 %d(10진수), %f(10진수 실수), %lf(10진수 실수)를 이용하여 출력하는 코드입니다. 서식 문자 %f는 실수 자료형 중에 float형에서 사용하고 서식 문자 %lf는 실수 자료형 중에서 double형에서 사용합니다.

6행에서 실수 0.5를 서식 문자 %d(10진수)로 출력하고 있습니다. 이처럼 실수 0.5를 정수형 서식 문자 %d로 출력하라고 요청하므로 0이 출력됩니다. 이것은 실수 0.5에서 정수부 0만 출력 된 것입니다.

9행,11행에서 실수 0.5를 서식 문자 %f(10진수 실수)와 %lf(10진수 실수)로 출력하고 있습니다. 실수 0.5를 실수형 서식 문자 %f, %lf로 출력하라고 요청하므로 0.5가 출력된 것입니다.

15행, 18행에서는 출력 겨로가를 살펴보면 소수점 이하 6자리까지 표현을 하고 있습니다. 15행, 18행에서 소수점 이하 6자리를 초과한 값을 지닌다면 반올림이나 버림이 되어서 오차가 생깁니다.

반응형

댓글