변경자 | 의 미 |
10진수 | 최소의 필드너비 지정 ex) %5d 출력될 데이터가 지정된 크기에 맞지 않으면 크기 무시 |
.10진수 | 정밀도 ex) .2f %f, %e, %g에서는 소수이하 자리수를 의미 %s에서는 프린트될 최대 문자의 개수 %d에서는 출력될 수의 최소개수를 의미, 앞의 여유분에 '0'을 채움 ex)%.5d => 00123 |
h | short형임을 표시 ex) %hu |
l | long형 또는 double형임을 표시 ex) %ld, %lf |
ll | long long형임을 표시 ex) %lld, %llu |
L | long double형임을 표시 ex) %Lf, %10.4Le |
* | 필드의 너비나 정밀도등을 임의로 지정하고자 할 때 사용 ex) %*d, %*.*f ex1) printf("%*d\n", b, a); // b가 *로, a가 %d로 ex2) printf("%*.*lf\n, b, a, fa); // b가 첫번째 *로, a가 두번째 *로, fa가 %lf로 |
플래그 | 의 미 |
- | 항목이 필드의 왼쪽부터 시작하여 프린트 ex) %-20s |
+ | 수치 앞에 부호를 붙여 출력 ex) %+6.2f |
공백 | 수치가 양의 값이면 공백을 음의 값이면 -를 붙여서 출력 ex)% 6.2f |
# | %o에 대해서는 8진 접두어 0을 %x에 대해서는 16진 접두어 0x를 붙여 출력 ex) %#o, %#x |
0 (zero) | 수치값 출력 시 여분 공간을 0으로 채워 출력 ex) %08d, %08.3f |
#include <stdio.h>
int main() {
char str[100];
double pi = 3.141592;
sprintf(str, "원주율 값은 %2.lf 입니다.", pi);
printf("%s\n", str);
return 0;
}
#include <stdio.h>
int main() {
long long lla = 7;
char ch = 'A';
short sh = 10;
int ia = 7;
printf("%lld %c %hd %d\n", lla, ch, sh, ia); // print buffer에 저장되는 순서 : ia → sh → ch → lla
return 0;
}
① int형인 ia가 먼저 print buffer에 저장
② short형인 sh가 print buffer에 저장
→ short는 2byte인데 4byte단위로 저장하는 print buffer 크기를 맞추기 위해 메모리 확장
③ char형인 ch가 print buffer에 저장
→ char은 1byte인데 4byte단위로 저장하는 print buffer 크기를 맞추기 위해 메모리 확장
④ long long형인 lla가 print buffer에 저장
→ long long은 8byte인데 4byte 단위로 저장하는 print buffer 크기를 맞추기 위해 4byte씩 잘라서 저장
→ 앞부분 4byte 먼저 저장, 뒷부분 4byte를 나중에 저장
① 제일 위에 있는 lla 출력 : %lld는 8byte를 원하기 때문에 4byte를 2번 받아 출력
② 그 다음 ch 출력 : %c는 1byte만 원하지만 억지로 4byte를 줌 → %c가 알아서 1byte만 잘라 사용
③ 그 다음 sh 출력 : %s는 2byte만 원하지만 억지로 4byte를 줌 → %s가 알아서 2byte만 잘라 사용
④ 그 다음 ia 출력
#include <stdio.h>
int main() {
float fa = 3.5;
double da = 7.2;
printf("%f, %lf\n", fa, da);
return 0;
}
fa는 4byte인데 왜 8byte를 print buffer에 저장하는가?
실수형은 무조건 byte인 배정도 부동소수로 저장한다.
즉, float → double로 변환
float은 단정도 부동소수라 형식이 다른데 어떻게 저장하는가?
임시기억공간에 fa의 값을 배정도 부동소수 형식으로 바꿔 저장하고
이를 print buffer에 넣는다. 단, printf가 끝나면 임시기억공간 해제
① 제일 위에 있는 fa 출력 : %f는 4byte가 아닌 8byte를 받아서 출력
② 그 다음 da 출력 : %lf이기 때문에 8byte를 받아서 출력
[TIL] 4 - 1. 제어문의 이해 - switch ~ case문의 이해 (0) | 2022.03.16 |
---|---|
[TIL] 3 - 2. 표준 입출력 함수 - scanf( ) (0) | 2022.03.03 |
[TIL] 2 - 5. 데이터형 - 형변환의 이해 (0) | 2022.03.01 |
[TIL] 2 - 4. 데이터형 - 문자열형의 이해 (0) | 2022.03.01 |
[TIL] 2 - 3. 데이터형 - 실수형의 이해 (0) | 2022.03.01 |
댓글 영역