본문 바로가기
기술자료/C C++

[오락실]cout 으로 양식화된 출력 사용하기

by 알 수 없는 사용자 2009. 8. 12.
728x90
반응형
cout << 5 << endl << 1736 << endl << 52 << endl;
 
라고 코드를 구성하면 아래와 같이 출력됩니다.
 
5
1736
52
 
위 출력을 아래와 같이 우측으로 일정하게 출력하려면 어떻게 cout 을 사용해야 할까요?
 
    5
1736
   52
 
이 문제를 해결하려면 ios::width 를 사용하시면 됩니다.
 
cout.width(4);  // 다음 cout 사용시에 4칸의 공간을 사용하도록 함.
cout << 5;       // 5는 출력시 1칸만 사용하지만 4칸을 채우기 위해서 3칸은
                     // 공백으로 채우게 됩니다.
 
하지만 width 함수는 바로 다음 cout에만 영향을 미치기 때문에 각 출력마다 모두 4칸을
확보하도록 코드를 구성하려면 아래와 같이 각각 하나씩 다 지정해야 합니다.
 
 cout.width(4);
 cout << 5 << endl;

 cout.width(4);
 cout << 1736 << endl;

 cout.width(4);
 cout << 52 << endl;
 
그렇다면 채워지는 공간이 항상 공백문자(' ')로만 채워질까요?
그러면 너무 제한이 심하겠죠 ^^;; 그래서 ios 클래스는 fill 이라는 함수를 제공하는데
이 함수를 사용하여 채워지는 문자를 원하는 문자로 바꾸어 놓을수 있습니다.
 
만약, 공백문자(' ') 대신에 숫자 '0'을 채우기로 사용하고 싶다면 아래와 같이
사용하면 됩니다. 그리고 fill 함수는 width 와 달리 프로그래머가 다른 문자로 변경할때까지
지속적으로 적용됩니다. 따라서 한번만 사용하시면 됩니다.
 
cout.fill('0');
 
cout.width(4);
cout << 5 << endl;

cout.width(4);
cout << 1736 << endl;

cout.width(4);
cout << 52 << endl;

 
위 코드를 실행시키면 아래와 같이 출력됩니다.
 
0005
1736
0052
 
자 그럼 자리 확보를 하는 경우, 우측정렬만 될까요? 당연히 아니겠죠 ^^;; 정렬의 기준을
변경하려면 flags 함수를 사용하고 좌측 정렬을 사용하고 싶다면 ios::left 값을 우측정렬을
사용하고 싶다면 ios::right 를 사용하면 됩니다. ( 기본값은 우측정렬인 ios::right 입니다. )
 
cout.flags(ios::left);
cout.fill('*');
cout.width(4);
cout << 5 << endl;
cout.width(4);
cout << 1736 << endl;
cout.width(4);
cout << 52 << endl;
 
위 코드를 실행시키면 아래와 같이 출력됩니다.
 
5***
1736
52**

출처 : http://www.tipssoft.com/
 
728x90