조정자(manipulator)는 입출력 형식을 바꿀 수 있는 객체이다.
별 다른 지시를 하지 않으면 프로그램은 값을 표준 형식(standard format)으로 입력하고 출력한다. 때에 따라서는 정수를 10진수가 아닌 16진수로 표시하고 싶을 수도 있고, 소수의 자릿수를 지정하고 싶을 수도 있다. 조정자는 이런 상황을 위해 제공하는 객체이다.
여러가지 조정자
입력할 때도 방법은 동일하므로, 출력하는 경우만 예시로 들었다.
endl
개행을 위해서 사용했던 endl도 사실은 조정자에 속한다.
'\n' 조정자를 추가해 줄바꿈을 하도록 설계되어 있다.
매개변수를 필요로 하지 않는 조정자이고, 스트림의 상태를 변경하지 않는다.
noboolalpha, boolalpha
bool 값을 정수로 표시할지, 문자 리터럴로 표시할 지 정한다.
noboolalpha는 bool 값을 0 또는 1의 정수로 출력한다.
boolalpha는 bool 값을 false 또는 true의 문자 리터럴로 출력한다.
#include <iostream>
using namespace std;
int main()
{
bool x = true;
bool y = false;
cout << x << endl;
cout << y << endl;
cout << boolalpha << x << endl;
cout << y << endl; //출력 스트림이 변경된 상태!
return 0;
}
13행에서 x를 출력할 때 이미 boolalpha 조정자를 통해 스트림을 변경했으므로, 14행에서는 조정자를 추가하지 않아도 변경된 스트림이 그대로 출력에 적용된다.
dec, oct, hex
수를 10진법(dec), 8진법(oct), 16진법(hex)으로 출력한다.
showbase, noshowbase
숫자를 어떤 진법으로 출력하고 있는지 보여준다.
10진수는 아무것도 없고, 8진수는 0, 16진수는 0x가 접두사로 붙는다.
fixed
실수 자료형을 출력할 때 고정 소수점 방식을 사용한다.
scientific
실수 자료형을 출력할 때 과학 표기법 방식을 사용한다.
showpoint, noshowpoint
showpoint로 소수점 아래 부분이 0일 때도 출력한다.
#include <iostream>
using namespace std;
int main()
{
int x = 1234;
double y = 4321;
cout << "dec: " << x << endl;
cout << "oct: " << oct << x << endl;
cout << "hex: " << hex << x << endl;
cout << endl;
cout << "dec: " << showbase << dec << x << endl;
cout << "oct: " << oct << x << endl;
cout << "hex: " << hex << x << endl;
cout << endl;
cout << "고정소수점: " << y << endl;
cout << "고정소수점: " << showpoint << y << endl;
cout << "과학표기법: " << scientific << y << endl;
return 0;
}
showpos
양수 기호를 출력한다.
uppercase
16진수로 정수를 출력할 때 a, b, c, d, e, f와 과학 표기법을 사용할 때 e 등 숫자 관련 표기에 포함되는 문자를 대문자로 출력한다.
#include <iostream>
using namespace std;
int main()
{
int x = 1234;
cout << showpos << x << endl;
cout << uppercase << hex << x << endl;
return 0;
}
left, internal, right
크기가 정해진 영역에 값을 출력하는 방식을 결정한다.
left는 부호-숫자-패딩 순으로, internal은 부호-패딩-숫자 순으로, right는 패딩-부호-숫자 순으로 출력한다.
아래의 세 조정자는 <iomanip> 헤더를 포함해야 사용할 수 있다.
setprecision()
소수점 아래 몇 자리까지 출력할지 지정한다. 괄호 안에 입력한 숫자만큼 출력한다.
setw()
필드 크기를 지정한다.
setfill()
필드의 크기가 실제 출력 내용보다 클 때 패딩(빈 공간)을 어떤 문자로 출력할지 지정한다.
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
double x = 123456.789;
cout << fixed << setprecision(2) << showpos << setfill('#'); //기본 출력 형식 지정
cout << x << endl;
cout << setw(15) << left << x << endl;
cout << setw(15) << internal << x << endl;
cout << setw(15) << right << x << endl;
return 0;
}
'프로그래밍 > C, C++' 카테고리의 다른 글
[C++] 클래스의 구조 (0) | 2022.12.11 |
---|---|
while 반복문을 종료하는 방법: 센티넬, EOF, 플래그 (0) | 2022.12.10 |
[C++] 변수를 초기화하는 세 가지 방법 (0) | 2022.11.18 |
[C++] 입출력(cin, cout)과 네임스페이스(namespace) (0) | 2022.11.17 |
<C프로그래밍-새내기를 위한 첫 C 언어 책>연습문제 chapter 11(1번~10번) (0) | 2020.11.26 |