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 |
댓글