개요
일반적으로 c++ 언어에서 데이터 입출력 시 표준 형식 standard format으로 값을 입출력한다.
하지만 상황에 따라서 이러한 입출력 형식을 바꿔야 할 때가 있다. 이를 위해 조정자 manipulator라는 객체를 사용한다. 조정자는 크게 데이터 출력을 위한 조정자와 데이터 입력을 위한 조정자로 구분할 수 있다.
출력 조정자
출력 조정자는 크게 매개변수가 없는 조정자와 매개변수가 있는 조정자로 나뉜다.
매개변수가 없는 조정자
매개변수가 필요 없는 조정자는 <iostream>에 정의되어있다.
endl을 제와한 모든 조정자는 출력 스트림의 상태를 변경해서 1회 사용하면 이후에 다른 조정자를 사용하기 전까지 계속해서 조정자가 적용된다. 즉, 1회만 지정하면 계속해서 적용된다.
endl 조정자
endl 조정자를 사용하면 개행을 추가하여 출력한다.
불 리터럴 조정자(noboolalpha, boolalpha)
기본값 : noboolalpha
noboolalpha 조정자는 불 값을 정수(0 또는 1)로 출력한다. boolalpha는 불 값을 리터럴(false 또는 true)로 출력한다.
숫자의 진법을 변경하는 조정자(dec, oct, hex)
기본값 : dec
정수를 몇 진법으로 출력할지 결정하는 조정자이다.
- dec : 10진법
- oct : 8진법
- hex : 16진법
진법의 접두사를 붙이는 조정자(noshowbase, showbase)
기본값 : noshowbase
숫자를 다른 진법으로 출력할 때, 어떤 진법으로 출력하고 있는지 나타내는 접두사를 지정하는 조정자이다. 10진수는 아무 것도 붙지 않고, 8진수는 0, 16진수는 0x가 접두사로 붙어서 각각의 진법을 나타낸다.
고정 소수점 출력 조정자와 과학 표기법 출력 조정자(fixed, scientific)
기본값 : fixed
부동 소수점 자료형을 출력할 때는 고정 소수점 fixed format을 사용하는 방법과 과학 scientific 표기법을 사용하는 2가지 방법이 있다.
소수점 아래 부분을 출력하는 조정자(showpoint, noshowpoint)
기본값: showpoint
c++는 기본적으로 소수점 아래 부분이 0일 때 소수점 아래 부분을 출력하지 않는다. 하지만 showpoint 조정자를 사용하면 소수점 아래 부분이 0일 때에도 출력한다.
양수 부호를 붙이는 조정자(showpos, noshowpos)
기본값 : noshowpos
c++는 숫자가 양수일 때 양수 부호(+)를 출력하지 않는다. 음수 부호만 출력된다. showpos 조정자를 사용하면 양수일 때도 양수 기호를 출력한다.
숫자 관련 문자를 대문자로 출력하는 조정자(uppercase, nouppercase)
기본값 : nouppercase
16진수로 정수를 출력할 때 알파벳(a, b, c, d, e, f) 등이 출력되고 부동 소수정의 과학 표기법 때도 알파벳 e가 출력된다. 이러한 문자는 기본적으로 소문자로 출력된다. 이를 대문자로 변경할 때는 uppercase 조정자를 사용한다.
숫자의 배치를 조정하는 조정자(left, internal, right)
후술할 매개변수가 있는 조정자를 사용하여 정해진 크기의 영역 field에 값을 출력하는 방법을 다룬다. 정해진 크기의 영역을 잡고 나면 left, right, internal 조정자를 사용해서 숫자를 배치하는 형식을 정할 수 있다.
매개변수가 있는 조정자
매개변수가 있는 조정자의 경우 사용하기 위해 <iomanip> 헤더를 읽어들여야 한다.
setprecision(n) 조정자
setprecision 조정자는 고정 소수점 출력 방식(과학 표기법 출력 방식 제외)에서만 사용한다. 괄호 안의 정수(n)로 소수점 뒤의 몇 자리까지 출력할지를 지정한다.
setw(n) 조정자
setw 조정자도 고정 소수점 출력 방식(과학 표기법 출력 방식 제외)에서만 사용된다. 괄호 안의 정수(n)은 전체 필드 크기를 의미하고, 이때 필드 크기는 정수 부분, 소수점, 소수점 아래 부분을 모두 합친 길이이다. 참고로 setw 조정자는 출력 스트림의 상태를 변경하지 않는다. 따라서 필요할 때마다 사용해야 한다. setw 조정자를 제외하고 매개변수가 있는 조정자는 출력스트림의 상태를 변경한다.
setfill(ch) 조정자
setfill 조정자는 필드의 크기가 실제 출력되는 내용보다 클 때 발생하는 패딩을 어떤 문자로 채울지 지정할 때 사용한다. 괄호 안에는 리터럴 문자를 넣는다. 이전에 설명한 조정자(left, interval, right, setw)들과 조합하여 사용한다.
입력 조정자
noboolalpha, boolalpha
기본값 : noboolalpha
불을 0과 1이 아니라, true와 false 문자열로 입력할 수 있는 조정자이다.
dec, oct, hex
기본값 : dec
정수 입력을 10진법, 8진법, 16진법으로 입력할 수 있게 설정하는 조정자이다.
참고자료