자료실/C언어

C언어 - printf()

자료수집중 2020. 6. 10.
반응형

printf는 Stdio.h 헤더 파일 안에 있는 표준 라이브러리 함수 중 하나입니다.

f는 formatted를 뜻합니다. 출력하기 위해 여러 포맷을 지정할 수 있다는 의미입니다.

printf("Hello World!");

"Hello World"를 출력해주는 코드입니다.

printf()는 "Hello World"라는 단순한 문자열도 출력할 수 만 다양한 출력이 가능합니다.

 

 

예제를 통해 사용해보겠습니다.

#include <Stdio.h> 
#include <limits.h> //정수형 Max, Min 확인 가능
#include <float.h>  //실수형 Max, Min 확인 가능

int main(void)
{
	printf("%d\n",INT_MAX);
	printf("%i\n", INT_MAX);
	printf("%u\n", UINT_MAX);
	printf("%x\n", INT_MAX);
	printf("%X\n", INT_MAX);
	printf("%o\n", INT_MAX);
	printf("%ld\n", LONG_MAX);
	printf("%lu\n", ULONG_MAX);
	printf("%lld\n", LLONG_MAX);
	printf("%llu\n", ULLONG_MAX);
	printf("\n");

	printf("%f\n", FLT_MAX);
	printf("%e\n", FLT_MAX);
	printf("%E\n", FLT_MAX);
	printf("%g\n", FLT_MAX);
	printf("%G\n", FLT_MAX);
	printf("%Lf\n", LDBL_MAX);
	printf("%Le\n", LDBL_MAX);
	printf("\n");

	printf("%c\n", 'g');
	printf("%C\n", 'g');
	printf("%s\n", "apple");
	printf("\n");

	int a = 31234;
	printf("%p\n", &a);
	printf("\n");

	printf("%%\n");
	printf("\n");

	return 0;
}

u가 들어가는 형식을 보면 부호가 없는 출력이라고 적혀있습니다.

u는 unsigned를 뜻합니다. 모든 자료형은 제한된 크기가 존재합니다.

예를 들어 int는 -2147483648~2147483647로 4byte의 크기를 가지고 있습니다.

unsigned int는 부호가 없기 때문에 똑같은 4byte의 크기를 가지지만 0~4294967295의

범위를 가지게 됩니다.

 

 

범위를 넘어가게 되면 오버플로우(overflow)가 발생합니다.

정수형부터 살펴보자면 만약%d를 출력할 때 2147483647에 1을 더하게 되면 어떻게 될까요?

printf("%d\n",2147483647+1); 은 -2147483648을 출력합니다. 프로그램은 오류를 표시하지 않습니다.

결국 최솟값으로 돌아가게 됩니다.

 

반대로  언더플로우(underflow)는

최솟값보다 작아지면 역으로 값이 커져버리는 상황이 발생합니다.

 

 

실수형은 정수형과 오버플로우가 다르게 표시됩니다.

예를 들어서 printf("%e\n", FLT_MAX*100000.0f);를 출력하면 어떤 값이 출력될까요?

warning으로 오버플로가 발생했다고 경고하면서 inf라는 출력이 나옵니다. 정수형처럼 최솟값으로 돌아가는 게 아니라 무한대(infinity)로 넘겨버립니다.

언더플로우는 0 처리를 해버립니다.

오버플로우나 언더플로우가 발생하면 원하는 값을 얻기가 어려워집니다.

그러므로 형식들의 자료형 크기를 확인하고 알맞게 사용해야 합니다.

 

 

 

 

다음으로 정렬, 유효숫자 표시, 자릿수 표시등을 알아보겠습니다.

예제를 보면 먼저 정수형

printf("%6d\n", 1234);
printf("%-6d\n", 1234);
printf("%06d\n", 1234);
printf("%+6d\n", 1234);
printf("%6d\n", 1234567);

결과를 보면 바로 이해하기 쉽습니다.

%6d는 6자리 오른쪽 정렬(남는 자리는 공백 처리)

%-6d는 6자리 왼쪽 정렬(남는 자리는 공백 처리)

%06d는 6자리 오른쪽 정렬(남는 자리는 0으로 처리)

%+6d는 6자리 오른쪽 정렬 기호 표시(남는 자리는 공백 처리)

마지막은 지정된 자릿수를 넘어가게 되면 무시하고 원래로 출력이 됩니다..

 

 

실수형은 (기본적으로 소수점 6자리까지 출력된다.)

printf("%10f\n", 3.14);
printf("%-10f\n", 3.14);
printf("%10.7f\n", 3.14);
printf("%010.1f\n", 3.14);
printf("%20e\n", 3.14);
printf("%20.7e\n", 3.14);
printf("%010.1e\n", 3.14);

결과를 보면

%10f는 10자리 오른쪽 정렬(남는 자리는 공백 처리, 소수점 값이 없으면0으로 표시)

%-10f는 10자리 왼쪽 정렬(남는 자리는 공백 처리, 소수점 값이 없으면0으로 표시)

%10.7f는 10자리 오른쪽 정렬 소수점7자리표시(남는 자리는 공백 처리, 소수점 값이 없으면0으로 표시)

%010.1f 10자리 오른쪽 정렬 소수점1자리표시(남는자리는 0으로 처리)

%20e는 20자리 오른쪽 정렬(남는 자리는 공백 처리, 소수점 값이 없으면0으로 표시)

%20.7e는 20자리 오른쪽 정렬소수점7자리표시(남는 자리는 공백 처리, 소수점 값이 없으면0으로 표시)

%010.1e 10자리 오른쪽 정렬 소수점1자리표시(남는자리는 0으로 처리)

표시자리수와 공백 소수점 표시가 조정이 가능합니다.

 

 

*문자와 문자열도 가능합니다.

printf("%20c\n", 'a');
printf("%-20c\n", 'a');
printf("%20s\n", "Hello World!");
printf("%-20s\n", "Hello World!");
printf("%020s\n", "Hello World!");

 

 

마지막으로 이스케이프 시퀀스(escape sequence)

앞에서 글을 보면 \n을 많이 보게 됩니다. 이스케이프 시퀀스 중 하나입니다.

역슬래시 + 한 단어를 붙여서 사용합니다. 여기서 역슬래시가 \입니다.

역슬래시로 보고 싶다면 메뉴에 '도구' -> '옵션'으로 가서 

'글꼴 및 색'에서 글꼴을 Consolas로 변경하면 됩니다

*꼭 Consolas안써도 됩니다. 프로그래밍 폰트 검색하면 많이 나옵니다. 편한 거 쓰세요.

이제 살펴보면

정도 있습니다.

적절한 이스케이프 시퀀스를 사용해서 출력을 제어할 수 있습니다.

'자료실 > C언어' 카테고리의 다른 글

C언어 - 조건문 if(), swith()  (0) 2020.06.15
C언어 - 연산자  (0) 2020.06.12
C언어 - scanf()  (0) 2020.06.11
C언어 - 기본 구조의 이해  (0) 2020.06.09
C언어 - 프로젝트 생성  (0) 2020.06.08

댓글