본문 바로가기
프로그래밍/C++

C++ ] Manipulator와 iomanip 헤더

by eteo 2023. 5. 28.

 

iomanip 헤더에는 스트림을 제어하기 위한 다양한 Manipulator가 포함되어 있다.

 

스트림은 C++에서 데이터의 입력 및 출력을 처리하는 방식을 말하며, 이를 위해 "iostream" 라이브러리에서 제공하는 클래스와 함수를 사용하는데, Manipulator는 이러한 스트림을 조작하여 데이터의 포맷팅, 출력 형식을 유연하게 지정할 수 있게 한다. endl; 도 개행 문자를 출력하고 버퍼를 비우는 Manipulator이다.

 

#include <iostream>
#include <iomanip>

int main() {
    int number = 12345;
    double pi = 3.14159;

    // setw()를 사용하여 출력 폭(width) 지정
    std::cout << "Number: " << std::setw(10) << number << std::endl;

    // setprecision()을 사용하여 소수점 이하 자릿수 지정
    std::cout << "Pi: " << std::setprecision(4) << pi << std::endl;

    // fixed 매니플레이터를 사용하여 고정 소수점 표기법 사용
    std::cout << "Pi: " << std::fixed << std::setprecision(2) << pi << std::endl;

    // setw()와 setfill()을 사용하여 출력 폭과 채움(fill) 문자 지정
    std::cout << "Number: " << std::setw(8) << std::setfill('*') << number << std::endl;

    return 0;
}

 

 

 

  • setw(int n) : 출력 필드의 폭을 지정한다.
  • setfill(char c) : 출력 필드의 채움 문자를 지정, 출력 폭보다 작은 값이 출력될 경우 나머지 공간을 지정 문자로 채운다.
  • setprecision(int n) : 부동 소수점의 정밀도를 지정한다.
  • fixed /scientific : 부동 소수점의 출력 형식을 고정 소수점 또는 과학적 표기법으로 변경한다.
  • hex, oct, dec : 출력할 정수의 진법을 16진수, 8진수, 10진수로 변경한다.
  • left / right / internal : 출력을 좌측 정렬, 우측 정렬, 가운데 정렬로 설정한다.
  • boolalpha / noboolalpha : 불리언 값을 문자열 "true"/"false"로 출력하거나 비활성화 한다.
  • showpos / noshowpos : 양수의 경우 '+' 부호를 출력하거나 비활성화한다.
  • uppercase / nouppercase : 16진수 출력에서 알파벳을 대문자로 출력하거나 소문자로 출력한다.

 

 

 

 

✔ 이런 출력 형식 관련 매니플레이터 및 함수들은 지속적으로 유지되는 것이 아니라, 해당 출력 연산에만 영향을 미친다. endl은 줄 바꿈을 수행하고 출력 버퍼를 비우는 역할을 하기때문에 endl을 사용하면 그 전에 설정한 출력 형식은 초기화된다.

 

 

 iomanip 헤더에는 hex, oct, dec는 있지만 bin 이진 변환 기능은 기본적으로 제공되지 않는다. 그렇기 때문에 binary 형식으로 출력하기 위해서는 std::bitset 클래스를 사용할 수 있다.

 

사용예시

#include <iostream>
#include <bitset>

int main() {
    unsigned int value = 42;
    std::bitset<32> binary(value);
    std::cout << "Binary: " << binary << std::endl;

    return 0;
}