레필리아
cout 출력 포맷 설정하기
레필리아
레필리아의 잡동사니
레필리아
전체
오늘
어제
  • 전체보기 (151)
    • 개발 공간 (1)
      • 매크로 (1)
    • 컴퓨터공학 리서치 (23)
      • 공개 (23)
      • 비공개 (0)
    • 컴퓨터공학 기초 (70)
      • Computer architectur.. (0)
      • Embedded system (6)
      • Operating system (0)
      • Database (2)
      • C.C++ (32)
      • Network (0)
      • Java (12)
      • 문제 풀이 (18)
    • 창고 (57)
      • 미분류 (57)
      • 유틸리티 (0)
      • 쓰레기통 (0)
      • ESLAB (0)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • MSP430F5437

최근 댓글

최근 글

hELLO · Designed By 정상우.
컴퓨터공학 기초/C.C++

cout 출력 포맷 설정하기

2011. 7. 28. 01:21

cout은 ostream의 메서드이며,
ostream 클래스는 ios 클래스로부터 상속되고, ios 클래스는 ios_base 클래스로부터 상속된다.
ios_base 클래스는 출력 상태를 서술하는 정보를 가지고 있다.

1. 진법 변경
Manipulator를 사용하여 화면에 정수를 출력할 때 사용되는 진법을 제어하며, ios_base의 멤버 함수를 사용하여 필드 폭과 소수점 아래 자릿수를 제어할 수 있다.
즉, hex(cout)과 같은 함수 호출은 cout 객체의 수치 출력을 16진수로 설정하며, 다른 진법으로 다시 설정될 때 까지 모든 정수들을 16진법으로 출력한다.
또한 cout << hex; 와 같은 형식으로도 함수를 호출할 수 있으며 namespace std에 들어 있다.

2. 필드 폭 조정
width() 멤버 함수를 사용하여, 필드 폭을 설정할 수 있다.

int width();
int width(int i);


첫 번째 원형은 현재 설정된 필드 폭을 리턴하며, 두 번째 원형은 필드 폭을 i 칸으로 설정하고, 이전의 필드 폭을 리턴한다.
width() 메서드는 바로 다음에 출력될 항목에만 영향을 미친다. 그 항목을 지나면 필드 폭은 다시 default 값으로 환원된다.

cout << '#';
cout.width(12);
cout << 12 << "#" << 24 << "#\n";

#          12#24#


3. 채움 문자
fill() 멤버 함수는 필드 폭의 남는 부분을 바꾸어 준다. 기본적으로 ' '(공백)이 default로 지정 되어 있다.
필드 폭과는 다르게, 새로운 채움 문자는 다시 변경될 때 까지 계속 유지 된다.

cout.fill('*');
cout.width(7);
cout << 900 << endl;


*****900

4. 부동 소수점수의 출력 정밀도 설정
precision()이라는 멤버 함수를 사용하여 정밀도를 다르게 설정할 수 있다. 디폴트 모드에서 정밀도는 출력되는 총 자릿수를 의미하며, 고정 소수점 표기 모드와 지수 표기 모드에서는 소수점 아래 자릿수를 의미한다. C++의 default 정밀도는 6자리이며 뒤에 붙는 0은 버린다. 설정된 정밀도는 다시 설정될 때 까지 계속 유지된다.

5. 뒤에 붙는 0과 소수점 출력
iostream 계열의 클래스들은 이것을 전담하여 수행하는 함수를 제공하지 않지만, ios_base 클래스는 몇 가지 출력 형식을 제어하는 setf() 함수를 제공한다. (setf 는 set flag의 약자)

cout.setf(ios_base::showpoint);

위와 같은 함수 호출은 cout이 뒤에 붙는 소수점을 출력하도록 만든다. 또한 디폴트 부동 소수점 형식에서 뒤에 붙는 0들도 출력하게 만든다. 즉, 디폴드 정밀도가 6일 경우에 2.00을 2로 출력하지 않고 2.00000으로 출력한다.

setf() 멤버 함수 또한 2가지 원형을 가지고 있다.

fmtflags setf(fmtflags);
fmtflags setf(fmtflags, fmtflags);

첫 번째 원형은 모든 플래그들이 이전의 설정값을 나타내는 fmtflags형의 수이다. 나중에 원래의 설정값으로 복원하기 위해 리턴값을 저장해 둘 수 있다. 다음과 같은 상수들을 전달인자로 사용할 수 있다.

 출력 형식 지정 상수  의미
 ios_base::boolalpha  bool 값을 true와 false로 입력하고 출력한다.
 ios_base::showbase  출력에 진법 표시 접두어(O, Ox)를 사용한다.
 ios_base::showpoint   뒤에 붙는 소수점을 표시한다.
 ios_base::uppercase   16진 출력, E 표기에 대문자를 사용한다.
 ios_base::showpos   양수 앞에 + 부호를 사용한다.

두번째 원형은 두 개의 전달인자를 취하고, 이전의 설정값을 리턴한다. 첫 번째 전달인자는 원하는 설정이 담긴 값이고, 두 번째 전달인자는 해당 비트들을 깨끗하게 지우는 값이다.
예를들어 다음과 같이 함수를 호출할 수 있다.

cout.setf(ios_base::hex, ios_base::basefield);

두번째 원형에서 사용가능한 상수들은 다음과 같다.

 제 2 전달인자  제 1 전달인자  의미
 ios_base::basefield  ios_base::dec
 ios_base::oct
 ios_base::hex
 10진법 사용
 8진법 사용
 16진법 사용
 ios_base::floatfield  ios_base::fixed
 ios_base::scientific
 고정 소수점 표기 사용
 과학적 E 표기 사용
 ios_base::adjustfield  ios_base::left
 ios_base::right
 ios_base::internal
 왼쪽 정렬 사용
 오른쪽 정렬 사용
 부호 또는 진법 접두어은 왼쪽 정렬,
 값은 른쪽 정렬

또한 setf로 설정한 것들은 unsetf로 해제할 수 있다. 예를 들어,

cout.setf(ios_base::showpoint); //뒤에 붙는 소수점을 출력
cout.unsetf(ios_base::showpint); //뒤에 붙는 소수점을 출력 안함


만일 설정된 비트가 없거나 두 비트가 모두 설정된 것과 같다거나 그 밖의 다른 조합이면 디폴드 모드가 사용된다.
그러므로 다음과 같은 호출은 디폴드 모드를 호출하는 방법이다.

cout.setf(0, ios_base::floatfield);

제 2 전달인자는 두 비트를 모두 끈다. 그리고 제 1 전달인자는 어떤 비트도 설정하지 않는다. 이를 unsetf()를 이용한다면 다음과 같다.

cout.unsetf(ios_base::floatfield);

6. 표준 조정자
setf()의 사용이 다소 난해하고 어려우므로, C++에서는 setf를 호출하는 몇 가지 조정자(manipulator)를 제공한다.
이 조정자들은 대부분의 구형 C++ 컴파일러에서 사용할 수 없다. 표준 조정자들은 아래와 같다.

 조정자  호출
 boolalpha  setf(ios_base::boolalpha)
 noboolalpha  unsetf(ios_base::boolalpha)
 showbase  setf(ios_base::showbase)
 noshowbase  unsetf(ios_base::showbase)
 showpoint  setf(ios_base::showpoint)
 noshowpoint  unsetf(ios_base::showpoint)
 showpos  setf(ios_base::showpos)
 noshowpos  unsetf(ios_base::showpos)
 uppercase  setf(ios_base::uppercase)
 nouppercase  unsetf(ios_base::uppercase)
 internal  setf(ios_base::internal, ios_base::adjustfield)
 left  setf(ios_base::left, ios_base::adjustfield)
 right  setf(ios_base::right, ios_base::adjustfield)
 dec  setf(ios_base::dec, ios_base::basefield)
 hex  setf(ios_base::hex, ios_base::basefield)
 oct  setf(ios_base::oct, ios_base::basefield)
 fixed  setf(ios_base::fixed, ios_base::floatfield)
 scientfific  setf(ios_base::scientific, ios_base::floatfield)

이들 조정다는 cout << left << fixed; 와 같은 방법으로 사용할 수 있다.

7. iomanip 헤더 파일
가장 많이 사용되는 함수가 정밀도를 결정하는 setprecision(), 채움 문자를 설정하는 setfill(), 필드 폭을 지정하는 setw() 함수이다. 이들 의 사용법은 다음과 같다.

cout << setw(6) << setfill('.') << "root" << setprecision(3);

 기능  구형 C++  신형 C++
 precision(n)  소수점 아래 n 자리를 출력  디폴드 모드에서는 총 n자리를 출력. 고정 소수점 표기 모드와 과학적 E 표기 모드에서는 소수점 이하 n 자리를 출력

 setiosflags


 
 ios::showpoint  뒤에 붙는 소수점과 0 출력  뒤에 붙는 소수점 출력
 ios::fixed,
 ios::scientific
   뒤에 붙는 0들을 출력


'컴퓨터공학 기초 > C.C++' 카테고리의 다른 글

[DLL] DLL 만드는 방법 2  (0) 2011.09.08
[DLL] DLL 만드는 방법 1  (0) 2011.09.08
쓰레드(pthread_create, pthread_join)  (0) 2011.04.03
함수 포인터와 void 포인터  (0) 2011.03.14
assert  (0) 2010.12.12
'컴퓨터공학 기초/C.C++' 카테고리의 다른 글
  • [DLL] DLL 만드는 방법 2
  • [DLL] DLL 만드는 방법 1
  • 쓰레드(pthread_create, pthread_join)
  • 함수 포인터와 void 포인터
레필리아
레필리아
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.