|
김경래 님이 쓰신 글 :
: 책을 한권빌렸거든요-_-;;
: 그안에 예제대로 치다보니..
: setw()<-이런게 나오더군요
: 그래서.. 첨보는거라.. 인터넷에서 찾아보니
: setw(n) n만큼 간격으로 출력을하는형식이라고 되어있는데요
: 저는 잘이해가 안가거든요..
: 쉽게 설명좀 부탁합니다.
: 그럼 즐거운 하루되세요
매니퓰레이터라는 것은
C에서의 printf() 처럼 서식화 출력기능을 제공하는 기능입니다.
setw()은 출력하는 필드의 폭을,
setprecision()은 실수의 정밀도(소수점 오른쪽 자리수)을 설정합니다.
다음은 이미 알고계신 C의 printf()를 써서 정수와 실수의 서식화 출력을 하는 예제입니다.
double root;
for (int i = 1; i <= 100; ++i) {
root = sqrt(n);
printf("%6d%12.3f%14.4f", n, root, sqrt(root));
}
타이핑하는 양은 상당히 적지만, 출력 변수의 타입에 맞추어서
"%6d%12.3f%14.4f" 와 같은 암호문 같은 서식 지정을 해야 되지요. -_-;;
C++에서 조정자를 쓰지 않고 출력하려면,
이해하기는 쉽지만 좀 귀찮은 방법으로 해야 합니다.
cout.width(6);
cout << n;
cout.width(12); cout.precision(3);
cout << root;
cout.width(14); cout.precision(4)
cout << sqrt(root) << end;
조정자를 사용할 경우는 역시 이해하기 쉬우면서도 훨씬 간단하게 됩니다.
cout << setw(6) << n
<< setw(12) << setprecision(3) << root
<< setw(14) << setprecision(4) << sqrt(root) << endl;
위의 두가지 방식의 중요한 차이점이 있는 데,
전자(조정자 안씀)는 한 번 설정하면 다시 설정할 때까지 설정을 유지하지만,
후자(조정자 사용)는 한 번 출력하면 설정이 다시 초기화되어 버립니다.
동일한 서식으로 계속 반복해서 출력할 때는
조정자를 사용하지 않고 출력하는 것이 코드도 간단하고 속도도 빠릅니다.
참고로, ANSI C++ 표준 제정(97년 말) 이전에 나온 컴파일러를 쓰실 경우는
(아마 제 기억에 Borland C++ 4.0 이하 버전일 겁니다.)
조정자 클래스가 <iomanip.h>라는 독립된 헤더 파일로 되어 있습니다.
반면에, 최근(Borland C++ 5.0 이상)의 ANSI C++ 호환 컴파일러는
#include <iostream>
만 하면 조정자를 쓸 수 있습니다.
|