' [C/C++] 8강 - printf의 다양한 사용법 (소수점, 접두사, 여백)

Programming/C & C++

[C/C++] 8강 - printf의 다양한 사용법 (소수점, 접두사, 여백)

mdisprgm 2021. 7. 7. 21:27
728x90

이번 강좌는 printf 서식 문자의 여러 사용법을 알아볼 것이다.

 

(1) 소수점 지정하기

#include <stdio.h>

int main() {
    double a = 3.14;

    printf("%lf\n", a);
}

원래는 이렇게 소수점을 출력했다.

 

그런데 이렇게만 출력하면 아래와 같은 일이 발생한다.

 

필요없는 뒷자리까지 출력 !

 

더 깔끔하게 셋째 자리까지만 출력하려면

 

서식 문자를 이렇게 쓰면 된다

 

%.3lf

 

%와 lf 사이에 .(소수점자릿수) 를 적으면 해당 자릿수까지만 반올림되어 출력된다.(float을 출력할 땐 f...)

 

 

3을 썼더니 반올림되어 3.142가 출력됐다.

 

 

물론 더 긴 자릿수까지 출력할 수도 있다.

 

 

 

 

(2) 접두사 붙이기

우리가 주로 사용하는 진법체계는 0~9를 사용하는 10진법이다.

 

그런데 C언어에서는 2진법, 8진법, 16진법을 사용할 수도 있다.

#include <stdio.h>

int main() {
    int a = 10;
    int b = 0x10;
    int c = 010;
    int d = 0b1010;

    printf("a : %d, b : %d, c : %d, d : %d\n", a, b, c, d);
}

각 진법에 맞는 접두사를 적어줘야 하는데

 

10진법은 늘 해왔던대로인 아무것도 없는 것,

 

8진법은 0

16진법은 0x

2진법은 0b이다.

 

int a, b, c, d에 각각 진법을 다르게 하여 값을 대입해보았다.

 

%d는 10진법 정수를 출력하는 서식 문자이므로 b, c, d가 10진법으로 변환되어 출력됐다.

 

8진법과 16진법은 각각 %o와 %x로 출력할 수 있는데, 이때 %와 문자 사이에 #을 쓰면 '접두사'를 붙일 수 있다.

#include <stdio.h>

int main() {
    int b = 0x10;
    int c = 010;
    
    printf("b : %x, c : %o\n", b, c);//접두사 없이 출력하기
    printf("b : %#x, c : %#o\n", b, c);//접두사와 함께 출력하기
}

 

아쉽게도 2진법은 C언어에서 지원하는 서식 문자가 없다..

 

그래서 직접 2진법으로 출력해주는 코드를 작성해야 한다.

 

10진법을 2진법으로 변환할 때는 2로 나눈 나머지를 이용하곤 하는데

 

단순 출력에는 조금 더 간단한 비트 연산을 써도 된다.

 

그러나 이는 어쨌든 아직 강좌를 쓰지 않은 제어문을 사용하므로 나중에 포스팅하겠다. 

 

 

(3) 여백

가끔 어떤 코드들을 보면 이러한 코드를 볼 수 있다.

사진에서는 변수 이름들의 길이가 달라서

가독성을 위해 Tab으로 열을 맞춰주는 것이다.

 

아래 주석과 비교해보면 확연한 차이가 보일 것이다.

 

이런 걸 콘솔창에서도 적용할 수 있다.

 

숫자 하나는 두 자릿수, 하나는 세 자릿수, 하나는 다섯 자릿수인데 최소 너비를 8로 설정해주면

 

모자란 공간은 공백으로 채워진다. 백문이불여일견..

#include <stdio.h>

int main() {
	int age		= 17;
	int foot	= 260;
	int balance = 10823;

	printf("%8d\n", age);
	printf("%8d\n", foot);
	printf("%8d\n", balance);
    
	printf("--------\n");
	printf("12345678\n");
}

출력 결과

17은 6칸, 260은 5칸, 10823은 3칸이 밀려난 상태로 출력이 된 걸 볼 수 있다.

 

또 앞에 숫자 앞에 0을 붙여주면,

#include <stdio.h>

int main() {
	int age = 17;
	int foot = 260;
	int balance = 10823;

	printf("%08d\n", age);
	printf("%08d\n", foot);
	printf("%08d\n", balance);
	//%8d -> %08d

	printf("--------\n");
	printf("12345678\n");
}

 

이렇게 여백이 0으로 채워지는 걸 볼 수 있다.

 

 

다음 강좌에서는 제어문에 대해 알아볼 것이다.

728x90

'