Table of Contents
C – printf
Hello, World!
#include <stdio.h>
int main() {
printf("Hello, World!\n");
}
기본형 출력 (int, char *, char)
%d
와 %i
는 동일하게 작동한다.
%c
와 %C
는 동일하게 작동한다.
#include <stdio.h>
int main() {
int i = 20;
char s[] = "Hello, World!";
char a = 'A';
printf("int : %d, char * : %s, char : %c\n", i, s, a);
}
숫자 출력 (unsigned int, float, double)
%x
와 %X
는 동일하게 작동한다.
int main() {
unsigned int u = 20;
printf("unsigned int : %u, int(16진수) : %x, int(8진수) : %o\n", u, u, u);
}
0.2 를 붙여서 소수점 아래 2자리까지만 표시하도록 할 수 있다.
int main() {
float f = 3.14159265;
double d = 3.14159265;
printf("float : %0.2f, double : %0.4f\n", f, d);
}
숫자출력 (long, long int, long long int)
long
은 long int
와 같은 의미이다.(int 는 생략 가능)
int main() {
long ld = 100;
long long int lld = 1000;
printf("long int : %ld, long long int : %lld\n", ld, lld);
}
32비트 숫자출력(uint32_t)
#include <inttypes.h>
uint32_t k = 0;
printf("k [ %"PRIu32" ]\n", k);
하지만 아래처럼 작성하는 것이 더 깔끔해 보인다.
printf( "%lu", (unsigned long ) k);
64비트 숫자출력(int64_t, uint64_t)
int main() {
int64_t lld = 100;
uint64_t llu = 1000;
printf("int64_t : %lld, uint64_t : %llu\n", lld, llu);
// OS 에 따라 %lu 가 되기도 함
// printf("int64_t : %lld, uint64_t : %lu\n", lld, llu);
}
pointer 출력
포인터는 16진수로 표시된다.
int main() {
char s[] = "Hello, World!";
printf("pointer : %p\n", s);
}
size_t 출력
z
를 사용한다.
int main() {
int i = 100;
printf("unsigned int : %zu, 16진수 : %zx, signed int : %zd\n", sizeof(i), sizeof(i), sizeof(i));
}
16진수, 8진수, 2진수 출력
%o, %x
형식으로 8진수/16진수를 표시합니다.
%#o, %#X
와 같이 지정하면 진수형식이 포함되어 표시됩니다.
이진수는 0x80000000 (이진수로는 1000 0000 0000 0000 0000 0000 0000 0000) 와 변환하려는 값을 and 연산을 수행하면서 값이 있는 자리수에 1 을 표시하는 방식으로 이진수를 출력할 수 있습니다.
#include <stdio.h>
// 10진수 -> 2진수 변환 (반복적 버전: 비트)
void ten_to_two(unsigned n) {
unsigned a = 0x80000000; // 1000 0000 0000 0000 0000 0000 0000 0000(2) <약 21억>
for (int i = 0; i < 32; i++) {
if ((a & n) == a)
printf("1");
else
printf("0");
a >>= 1;
}
}
int main() {
int i = 10;
// 10, 12, a, 012, 0XA
printf("%d, %o, %x, %#o, %#X\n", i, i, i, i, i);
// 00000000000000000000000100000000
ten_to_two(256);
return 0;
}
기타 포매팅
int main() {
int i = 100;
float f = 3.14159265;
printf("[%8d]\n", i); // 8칸 간격안에 숫자표시(오른쪽 정렬)
printf("[%-8d]\n", i); // 8칸 간격안에 숫자표시(왼쪽 정렬)
printf("%.5f\n", f); // 소수점 아래 5자리까지 표시
printf("%+d\n", i); // 플러스/마이너스 표시
printf("[%08d]\n", i); // 제로 패딩
}
[ 100]
[100 ]
3.14159
+100
[00000100]
정렬
오른쪽 정렬
int main() {
int i = 0;
printf("%4d\n", i + 50);
printf("%4d\n", i + 1000);
printf("%4d\n", i + 150);
}
왼쪽 정렬
int main() {
int i = 0;
printf("%-4d\n", i + 50);
printf("%-4d\n", i + 1000);
printf("%-4d\n", i + 150);
}
특수문자
특수문자 | 표시 |
---|---|
backslash | \\ |
double quote | \" |
tab | \t |
newline | \n |
single quote | \' |
question mark | \? |
% | %% |
특수문자
10.3