C – printf

By | 2022년 2월 23일
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)

longlong 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);
}

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 \?
% %%

One thought on “C – printf

답글 남기기