C++ Manipulator(조정자)

mohadang·2022년 9월 17일
0

C++

목록 보기
1/48
post-thumbnail

output formatting

C 에서는 printf("%#x", 10); 이렇게 사용한다 읽기가 어렵다 그래서 '조정자' 라는 것이 생겨 났다.

Manipulator(조정자)

positive

cout << showpos << number;    //+123
cout << noshowpos << number;  //123

진법

cout << dec << number;    //123
cout << hex << number;    //7b
cout << oct << number;    //173

uppercase

cout << uppercase << hex << number << endl;   //7B
cout << nouppercase << hex << number << endl;   //7b

showbase

cout << showbase << hex << number << endl;  //0x7b
cout << noshowbase << hex << number << endl;  //7b

left/internal/right

cout << setw(6) << left << number;      //|-123  |
cout << setw(6) << internal << number;  //|-  123|
cout << setw(6) << right << number;     //|  -123|

showpoint

cout << noshowpoint << decimal1 << " " << decimal2;   //100 100.12
cout << showpoint << decimal1 << " " << decimal2;   //100.000 100.120

float pi = 3.14;
cout << pi << endl;//  3.14
cout << noshowpoint << pi << endl;//  3.14
cout << showpoint << pi << endl;//  3.14000

float pi = 3.141519;
cout << pi << endl;//  3.14152
cout << noshowpoint << pi << endl;//  3.14152
cout << showpoint << pi << endl;//  3.14152

fixed, scientific

cout << fixed << number;    //123.456789
cout << scientific << number;    //1.2345678+02

boolalpha

cout << boolalpha << bReady;    //true
cout << noboolalpha << bReady;    //1

iomanip 안에 있는 조정자

함수 형식이다.

setw

#include <iomanip>
cout << setw(5) << number;    //|  123|

setw로 뭔가 채우기 위해서는 적어도 빈문자열이라도 출력 해야 한다.

cout << setfill('*') << setw(5) << "";    //*****
cout << setfill('*') << setw(5) // 이렇게 하면 아무것도 출력 안함.

대부분의 Manipulator는 한번 지정하고 나면 그 다음 stream을 사용할 때도 영향을 받게 된다. 그러나 setw는 한번만 적용 된다.

char buf[4] = "ABC";
std::cout << setw(5) << buf << endl;
std::cout << buf << endl;

/*
[Output]
  ABC
ABC
*/

Ex

cout << left << setw(6) << -10 << '@' << '$' << endl;
cout << right << setw(6) << -10 << '@' << '$' << endl;
cout << internal << setw(6) << -10 << '@' << '$' << endl;

/*
-10   @$
   -10@$
-   10@$

setw는 한번만 적용 된다.
*/

setfill

#include <iomanip>
cout << setfill('*') << setw(5) << number;    //**123

setprecision

//소수점 이하 7자리까지
cout << setprecision(7) << number  //123.4567 

double f = 3.1415926535879;

//fixed가 '없는' 경우엔 정수부+소수부 기준으로 다섯자리를 반올림하여 출력
//3.1416, 정수부+소수부 바로 뒷자리에 있는 9를 반올림 함.
cout << setprecision(5) << f << '\n';

//fixed가 '있는' 경우엔 소수분만을 기준으로 다섯자리를 반올림하여 출력
//3.14159, 소수부 바로 뒷자리에 있는 2를 반올림 함.
cout << fixed << setprecision(5) << f << '\n';

조정자는 함수로도 호출 할 수 있다

cout << showpose;
cout.setf(ios_base::showpos);

cout << setw(5);
cout.width(5);

//멤버 메서드들은 ios_base 네임스페이스에 존재

float 의 출력시 반올림이 이루어 진다는 것을 염두해 두자

cout << 3.123415 << endl;//3.12342
cout << 3.123414 << endl;//3.12341

//6자리에서 반올림 이루어짐.
profile
mohadang

0개의 댓글