C & C++/윤성우의 열혈 C 프로그래밍

[열혈 C] printf함수에서 서식문자의 다양한 활용

거북이 코딩 2023. 10. 5. 12:38

서식문자의 종류와 그 의미

 

 printf 함수에서 쓰이는 서식문자의 종류를 알아보자.

서식문자 출력 대상 출력 형태
%d char, short, int 부호 있는 10진수 정수
%o unsigned int 부호 없는 8진수 정수
%x unsigned int 부호 없는 16진수 정수
%s char* 문자열

 

%#o 와 %#x

 

 %o 와 %x 는 서식문자 사이에 #을 넣게 되면 해당 진수임을 드러내며 출력이 된다.

#include <stdio.h>

int main(void)
{
	int a = 17;
	printf("10진수 : %d\t8진수 : %#o\t16진수 : %#x", a, a, a);
	return 0;
}
10진수 : 17     8진수 : 021     16진수 : 0x11

 위와 같이 8진수 앞에는 '0'이 붙고 16진수 앞에는 '0x'가 붙는다.

 

필드 폭을 지정하여 정돈된 출력 보이기

 

 서식문자 사이에 원하는 필드폭을 입력하면 그에 맞게 출력할수 있다. 예를들어 %8d로 출력하면 8칸에 맞춰서 오른쪽 정렬하여 출력된다. %-8d로 출력하면 8칸에 맞춰서 왼쪽 정렬하여 출력된다.

#include <stdio.h>

int main(void)
{
	int a = 17;
	printf("%-8s %-8s %3d\n", "홍길동", "남천동", 17);
	printf("%-8s %-8s %3d\n", "이순신", "봉양동", 44);
	printf("%-8s %-8s %3d\n", "신용준", "송내동", 21);
	return 0;
}
홍길동   남천동    17
이순신   봉양동    44
신용준   송내동    21

 

 %8d 에서 '0'을 추가해서 %08d로 사용하게 되면 왼쪽에 남은 공간을 모두 '0'으로 채우게 된다. %d 뿐만 아니라 다른 서식문자도 가능하다. 

#include <stdio.h>

int main(void)
{
	printf("%08d\n%08d\n%08s\n", 1234, 567, "신용준");
	return 0;
}
00001234
00000567
00신용준

 한글은 두칸씩 차지하기 때문에 8칸에 3글자를 써도 0은 두개밖에 출력되지 않는다.

 

 소수점 자릿수 또한 지정할수있다. 그냥 %f로 출력하면 무조건 소수점 아래 6자리까지 출력한다. 하지만 %f 사이에 .(소수점 자릿수)를 입력하게 되면 그에 맞춰서 반올림하여 출력된다. 예를들어 1234.5678을 %.3f로 출력하게 되면 반올림하여 1234.568로 출력이 된다. 또한 앞에서 나온 '0'으로 채우기를 섞어서 123.456을 %08.2f 로 출력하게 되면 8칸을 확보한 상태에서 왼쪽은 0으로 채우고 소수점아래 2자리 까지 출력하게 된다.

#include <stdio.h>

int main(void)
{
	printf("%f\n", 123.456);
	printf("%.2f\n", 123.456);
	printf("%8.2f\n", 123.456);
	printf("%08.2f\n", 123.456);
	return 0;
}
123.456000
123.46
  123.46
00123.46