printf : 형식문자열을 사용하여 문자열을 출력하는 함수
형식문자를 구분하기 위해 %기호를 사용
형식문자의 개수에 따라 인자의 수도 일치해야 함
특정 숫자에 대응하는 문자를 만들었는데 아스키코드라 한다
컴퓨터는 문자를 모르지만 해당 숫자에 대응하는 아스키코드에 의해서
문자나 특수문자를 표현할 수 있다.
형식문자 |
자 료 형 |
설 명 |
%c |
int(char) |
아스키 문자로 출력 |
%d |
int |
부호가 있는 10진수로 출력 |
%u |
unsigned int |
부호가 없는 10진수로 출력 |
%x |
모든 자료형 |
16진수로 출력 |
%e |
float, double |
지수형 실수로 출력 |
%f |
float, double |
10진수 실수로 출력 |
%p |
pointer |
16진수 주소로 출력 |
%s |
string |
인자가 가리키는 메모리 값의 문자열로 출력 |
printf(“%c”, 65);
형식문자 %c는 인자의 값을 정해진 값에 맞는
아스키코드로 출력해주는데 숫자 65에
해당하는 문자는 A이므로 문자 A를 출력.
printf(“%c”, 65+1);
숫자 65에 해당하는 아스키코드가 A이고
숫자 66에 해당하는 아스키코드가 B이므로
65+1은 66이므로 문자 B를 출력.
printf(“%d”, 65);
형식문자 %d는 인자의 값을 부호가 있는 10진수로 출력하므로
숫자 65를 출력.
printf(“0x%x”, 65);
형식문자 %x는 인자의 값을 16진수로 출력하며
16진수 문자인 것을 알기위해 형식문자 앞에 0x를 작성
0x41을 출력.
printf(“%s”, “Hi”);
형식문자 %s는 인자가 가리키는 메모리 값의 문자열을 출력하므로
대응하는 인자의 메모리 값의 문자열인 Hi를 출력.
char Name[8] = {"Hi"};
printf("%s", Name);
위와 똑같은 결과를 출력
char Name[12] = {“Hello”};
printf(“%p”, Name);
형식문자 %p는 인자의 16진수 주소를 출력하는 것이고
Name이라는 식별자는 “Hello”라는 문자가
저장되어 있는 16진수 주소를 가지고 있는
배열 이름이고 그 주소를 출력하는데 쓰인다.
printf(“%f”, 123.45);
형식문자 %f는 인자의 값을 10진수 실수로 표현하며,
%f는 32비트, %lf는 64비트 자료형이지만
printf함수에서는 float나 double를
모두 %f로 표현해도 문제가 되지 않는다
double로 표현되므로 123.4500000으로 출력.
컴파일러에서 기본값으로 지정한 소수점 이하 자리수가
6자리이기 때문에 소수점 이하 6자리까지 표현됨.
기본적으로 실수의 값을 double형식으로 인지.
123.45라고 한다면 double형식으로 표현.
만약 이 값을 123.45f로 작성하면 해당 자료형을
float형식으로 표현한다.
값은 123.449997이 나온다.
여기서 주의할 점이 바로 유효자리수 인데
유효자리수가 의미하는 것은 신뢰할 수 있는 값의 범위이다.
즉 float형의 경우 소수점이하 7번째 자리부터의
값은 잘못된 값이라는 뜻이고 이를 부동소수점 오차라고 한다.
float형의 유효자리수 6
double형의 유효자리수 15
따라서 float는 소수점이하 6자리까지의 값은 신뢰가능하지만
그 이하 자리의 값은 반올림하여 표현하므로
표현 값의 범위가 넓은 실수를 계산하는 것에는
그 정확성이 떨어지므로 float는 왠만하면 쓰지 않는 것이 좋다.
printf(“%12.3f”, 123.45)
전체 자리수 12자리에 소수점 아래 3자리까지 표현
“ 123.450” 이런식.
" 123"까지가 8자리, "450"까지 3자리.
printf(“%.10f”, 123.45)
소수점 아래 10까지 표현. 123.4500000000
printf(“%d”, 123.45)
실수 값을 정수표현방식으로 출력하는 %d로 작성하면
출력값의 오류가 발생
printf(“%f”, 123)
정수 값을 실수표현방식으로 출력하는 %f로 작성하면
출력값의 오류가 발생
printf(“%d”, -1) : -1
printf(“%u”, -1) : 4,294,967,295
32비트가 표현할 수 있는 최대값
** 잘못알고 있는 것이 있으면 댓글로 알려주시면 감사하겠습니다! **
'프로그래밍 > C언어' 카테고리의 다른 글
형식 문자열 입출력 함수 ( 스캔셋 ) (3) (0) | 2018.06.07 |
---|---|
형식 문자열 입출력 함수 ( scanf ) (2) (0) | 2018.06.05 |
문자열 입출력 함수 (gets / puts) (2) (0) | 2018.06.01 |
문자열 입출력 함수 (배열) (1) (0) | 2018.06.01 |
문자 입출력 함수 (_getch / _getche) (2) (0) | 2018.06.01 |