출력 형식 지정자(stream manipulators)

|

이 함수들은  iomanip 헤더에 있는 함수다.


일단 setw부터 보자면,
cout<<"abcde"<<setw(5)<<"1234";
라고 출력했을시, "abcde 1234"라고 출력된다. 즉 setw는 괄호 뒤 숫자만큼의 공간을 만들고, 바로 뒤에 오는 문자를 오른쪽 칸부터 채워넣게 한다..
오른쪽부터 채우지 않고 왼쪽부터 채우고 싶다면, cout<<"abcde"<<left<<setw(5)<<"1234";라고 써주면 된다. 이 설정은 sticky하므로 이후에 쓰는 setw에 모두 적용된다.
만약 뒤에 오는 문자가 괄호 안 숫자보다 크게 되어도 그대로 출력되지만, 입력에서의 setw(cin이라던가)는 괄호 안의 숫자만큼만 입력받게 된다.
정리하자면, 뒤에 오는 출력값의 공간을 미리 확보해준다고 보면 되겠다.


setfill함수는 보통 setw와 함께 쓰이며, 값이 써지지 않는 공란에 자동으로 괄호 안의 문자를 넣어준다.
cout<<setw(10)<<setfill('_')<<left<<"abcef";
라고 쓰면, 확보된 공간 10칸에서 a b c e f 5칸만 사용했기 때문에 나머지 5칸에는 자동으로 _ 문자가 5번 들어가게 된다.
문자열이 아닌 문자이므로 ' '를 쓰는 것을 잊지 말자.또한 이 함수는 sticky한 성질을 갖는다.


setprecision은 정밀도를 정하는 함수다.
숫자를 괄호안의 숫자만큼 표시해주는 함수다.
float num = 3.141592;
 cout<<setprecision(3)<<num;
라고 설정했다면, 3.14까지 출력된다. setprecision은 그냥 유효숫자를 출력해주는 함수라고 생각하면 된다.



int main()
{
 double a= 3.141592;
 double b = 0.0012;
 double c = 0.01234;
 double d = 0.1234;


 cout<<setprecision(3)<<a<<endl<<b<<endl<<c<<endl<<d<<endl;
 
 cout<<"fixed 적용 후"<<endl;

 cout<<fixed<<a<<endl<<b<<endl<<c<<endl<<d<<endl;

 
 return 0;
}

이 예제의 결과를 보면,순서대로

 

3.14
0.00123
0.0123
0.123

fixed 적용 후

3.142
0.001
0.012
0.123

로 출력된다.
유효숫자가 3개로 지정해 출력하도록 하였으므로 3.141592 의 숫자 중 앞의 유효숫자 3개인 3 1 4가,
다음 0.0012의 유효숫자 2개인 1 2 가,(앞의 0.00은 유효숫자는 아니니)
그다음은 0.1234 중 3개 1 2 3이 출력되었다.

fixed 를 적용하게 되면 소수점이 고정이 되면서 그냥 유효숫자를 소수점 이하로 판단, 유효숫자인지 묻지도 따지지도 않고 setprecision 뒤의 숫자만큼 그대로 출력하게 된다.

여기서 setfill과 setprecision, fixed의 설정은 sticky하여 풀어주지 않는 이상 이후의 출력에 대해서도 유효하다.
정리하자만 setw는 공간확보함수,setfill은 공란을 자동으로 채워주는 함수,setprecision은 숫자 출력시 정밀도를 정해주는 함수,

참고로 setprecision(0)과 fixed를 같이 쓰면 소수점을 떼고 정수부분만 출력된다.showpoint를 적용하면 .만 찍힘.

hex - 16진수로 표현.
dec - 10진수
oct - 8진수

cout<<hex<<number; 이런식으로 써주면 된다.

setbase(숫자)
-> 헤더 iomanip에 있다.10,8,16 중 하나를 인자로 받아 그것에 해당하는 진수로 바꿔주는 함수다.

cout<<setbase(10)<<endl; 이런식으로 활용한다.

 

cin.width , cout.width -> 입출력시 필드의 width를 정함. cin을 받을때는 null문자때문에 width(숫자-1) 만큼 입력 받음.

매니퓰레이터 setw도 같은 역할을 하므로 둘 중 골라서 사용하면 된다.

internal -> 값을 오른정렬, 하지만 부호나 진법을 나타내는 기호는 왼쪽 정렬.가운데는 공백.

showbase -> setbase 아님. 진법을 나타내는 기호 0x 나 0을 같이 출력함. 되돌리고 싶으면 noshowbase

skipws -> 공백 무시하고 입력받음. 되돌리고 싶으면 noskipws (cin은 기본적으로 skipws가 발동되어 있으므로 입력시 공백이 들어오면 입력값으로 받지 않음.(정확히는 >> 로 받는건 공백 무시.))

showpoint -> 실수를 출력할 때 소수점 이하가 0이래도 소수점 출력.

uppercase -> 문자 E나 16진수시 사용하는 영문자들을 대문자로. 취소하고싶으면 nouppercase

showpos -> 양수의 경우도 +기호 붙임

scientific -> 실수를 항상 e를 붙여 표기. e는 10,+는 배수. 무조건 정수를 한자리로 만든다.(무조건 아님 정수는 아니더라)소수부는 6자리.

boolalpha -> 부울값을 true와 false로 출력. 취소하고싶으면 noboolalpha.

 

 

padding

멤버 함수 fill - cout.fill() setfill과 같은 역할을 한다.

 

 

eofbit -> EOF에 도달하면 1로 세팅됨. 멤버함수 eof로 체크 가능.

failbit -> 잘못된 값이 입력받고나 되면. 멤버함수 fail로 체크 가능.

badbit -> 심각한 상황. 복구 불가능한 상황. 멤버함수 bad로 체크 가능.

goodbit -> 위 3개가 전부 0이면 1로 됨. good으로 체크 가능.

cin이나 cout.clear(bit) -> stream의 특정한 비트(위의 비트들)를 참으로 만든다.

cin.clear() - goodbit가 default라 goodbit를 참으로 만든다.
cin.clear(ios::failbit) 이런식으로 특정 비트도 세팅 가능.


 

신고

'ComputerEngineering > C/C++' 카테고리의 다른 글

생성자 오버로딩,copy 생성자.  (0) 2012.11.04
상속(Inheritance)  (0) 2012.11.04
출력 형식 지정자(stream manipulators)  (2) 2012.10.23
Preproccessor Wrapper  (0) 2012.10.18
연산자 오버로딩,lvalue,rvalue  (0) 2012.10.17
Composition 그리고 Copy Constructor  (0) 2012.10.09
trackback 0 And Comment 2