본문 바로가기
IT/C++(CPP)

CPP 초급 강좌 5. C++ Manipulator, Iomanipulator, 조정자

by 신림83 2020. 10. 5.
반응형

CPP 초급 강좌 5. C++ Manipulator, Iomanipulator, 조정자

이번에는 Manipulator 조정자에 대하여 적어보겠습니다.

 

조정자란 일단 '입출력의 형태를 지정' 하는데 사용한다고 보시면 됩니다.

아래 예제를 통해 좀 더 알아보아요

 

예제 1

#include <iostream>

int main()
{
	int n = 10;

	std::cout << n << std::endl;  

	std::cout << "종료" << std::endl;
}

 

예제 1의 출력결과

10이라고 출력된다. 10 진수 표현으로 정상출력

여기서 숫자를 16진수로 표현하려고 한다면?

 

예제 2

#include <iostream>

int main()
{
	int n = 10;

	std::cout << n << std::endl;

	std::cout << std::hex << n << std::endl;  // 16진수 출력을 하라

	std::cout << "종료" << std::endl;
}

std:hex 코드 추가로 3번째 라인에서 10을 16진수로 출력했다. 결과는 아래와 같이 정상이다.

 

2의 출력결과

a 라고 정상적으로 16진수로 표현된다.

 

16진수 출력이후 다시 10진수를 출력하려고 하면?

 

예제 3

#include <iostream>

int main()
{
	int n = 10;

	std::cout << n << std::endl;

	std::cout << std::hex << n << std::endl;  // 16진수

	std::cout << n << std::endl; //다시 10진수를 출력하고 싶었지만 결과는?

	std::cout << "종료" << std::endl;
}

일단 결과를 보자.

3번째 출력이 또 a가 나왔다. 이건 의도한 바가 아닌데...

std:hex라는 표현식은 하나의 라인에 국한된 표현이 아니다. 해당 코드를 사용하면 이후 모든 숫자 표현은 16진수로 표현된다. 의도한 대로 수정하며 좀더 보기 좋은 코드로 수정해 보자.

 

추가로 namespace std 코드도 많으니 using namespace std; 를 사용하여 좀더 가독성을 올려본다.

 

예제 4

#include <iostream>
using namespace std;

int main()
{
	int n = 10;

	cout << n << endl;

	cout << hex; // 이후로 숫자 출력은 16진수

	cout << n << endl;  

	cout << dec; //이후로 숫자 출력은 10진수

	cout << n << endl; //다시 10진수를 출력하고 싶었지만 결과는?

	cout << "종료" << endl;
}

예제 4의 결과

원하는 대로 출력되었다.

조정자 함수, hex, dec 등은 사용하면 이후 cout 시 전체 적용이므로 명시적으로 라인을 불리하여 호출시켜주었다. 

dec 를 호출하면 이후의 숫자는 10진수로 다시 돌아온다.

 

주요 포인트

 조정자 함수를 사용하면 이후 출력내용에도 내용이 적용된다! 이를 체크하자.

 

조정자 함수에는 어떤 것들이 있을까요?

 

몇몇 여러분이 사용하실것 같은것을 추가해 봅니다.

 

#include <iostream> 

showpos/noshowpos

양수(+) 출력

 

dec

10진수로 출력


hex
16진수로 출력


oct
8진수로 출력

 

uppercase
대문자로 출력


left/internal/right
왼쪽 정렬 / 내부 정렬/ 오른쪽 정렬


showpoint/noshowpoint
소수점 값 표기 / 소수점 값 없으면 표기X 
ex)  showpoint 경우 10.1 -> 10.100
noshowpoint 경우 10.1 -> 10.1

fixed/scientific
고정적으로 표기 / 부동소수점 표기

boolalpha / noboolalpha
true,false 로 표기 / 값으로 표기 (1,0)

 


#include <iomanip>

setw(number)
n만큼의 공간차지

setfill(char)
빈공간의 char형 문자를 채우기

setprecision(number)
n만큼의 유효한 소수점 표기

 

좀더 자세한 조정자에 정보를 보고 싶다면?

아래 페이지를 참고해주세요

 

Input/output manipulators - cppreference.com

Manipulators are helper functions that make it possible to control input/output streams using operator<< or operator>>. The manipulators that are invoked without arguments (e.g. std::cout << std::boolalpha; or std::cin >> std::hex;) are implemented as func

en.cppreference.com

해당 페이지 간략하게 보기

cppreference.com 의 조정자 함수 정보

각 조정자 함수에 접근해보면 자세한 사용방법 코드 예제등을 보실수 있습니다.

 

추가로 제가 빨간줄 해둔것은 필요한 include 입니다.

<ios>, <istream>, <ostream> 같은 경우는 <iostream>을 포함하시면 모두 포함되는 관계이니 참고해주세요.

반응형

댓글