hyunjin

출력 포맷 변경 iomanip 본문

개인 공부/C++

출력 포맷 변경 iomanip

_h.j 2020. 9. 1. 10:37
728x90

1.std:: cout 출력 포맷 변경 방법

iomanip 에서 제공하는 함수 사용해 포맷 변경 가능

 

 

2.필요 헤더

#include <iomanip>

 

3. 사용법

std::cout 에 포맷을 먼저 세팅 후 표현할 정보 입력

 

1)특정 format 설정 (std::setiosflags)

-한 번 설정한 format은 설정을 제거하지 않는 한 유지

- setioflags에 인자 값은 꼭 std :: ios에 있는 값 사용해야함. 그렇지 않으면 에러

 

 

-예제 코드 : 코드업 1012

#include <bits/stdc++.h>
#include <iomanip>
using namespace std;

int main(void){
	float number;
	cin>>number;	
	cout<<fixed<<setprecision(6)<<number<<"\n";
	return 0;	
}

기본적으로 숫자를 출력할때 cout의 정밀도는 6이다. (즉, 자체적으로 6개의 숫자를 출력한다.) 

하지만 문제에서 제시된 예시는 7자리 수이므로 출력자릿수 조정이 필요하다. iomanip헤더의 setprecision기능을 사용해야한다.

fixed와 setprecisino을 같이 쓰게되면, 소수점만 n자리수 출력합니다.

fixed가 없다면, 정수와 소수부분을 합쳐서 n자리수로 출력하게 된다.

 

 

2)특정 format 해제 (std::resetiosflags)

-예제 코드

// std::setiosflags 를 사용 
std::cout << std::resetiosflags (std::ios::showbase | std::ios::uppercase);
std::cout << "unsetformat : " << std::dec << num << std::endl;

아직 잘 모르겠다.

 

 

 

4. sample 코드

#include <bits/stdc++.h>
#include <iomanip>
using namespace std;

int main(void){
	int num =10;
	float fnum=10.001;
	int lhex = 0x1a;
	int uhex = 0x1A;
	double f = 3.14159;

4.1 format 세팅 방법 

std::setiosflags 사용

 

 

4.2 특정 format 해제 방법

sed::setiosflags 사용

 

 

4.3 현재 cout 상태 저장

 

4.4 샘플 코드

 

10칸 확보, 우측 정렬

10칸 확보, 좌측 정렬

빈칸채우기

decimal

decimal을 hexa로 표기

Hex를 대문자로 표기

접두 문자를 표시. hex일 경우 0x

양수를 +로 표기

끝에 0을 표시하여 정확도

정확도를 높이기

4.5 현재 cout 상태 복구

다음 1,2중 하나 선택

#include <bits/stdc++.h>
#include <iomanip>
using namespace std;

int main(void){
	int num =10;
	float fnum=10.001;
	int lhex = 0x1a;
	int uhex = 0x1A;
	double f = 3.14159;
	
	
	cout<< "--------1.format 세팅--------"<<"\n";
	cout<<setiosflags(std::ios::showbase | std::ios::uppercase);
	cout<<"setformat   : "<< hex<<num<<"\n"; 
	
	
	cout<< "--------2. 특정 format 해제--------"<<"\n";
	cout<< resetiosflags(std::ios::showbase | std::ios::uppercase);
	cout<<"unsetformat   : "<< dec<<num<<"\n"; 
	
	
	cout<< "--------3. 현재 cout 상태 저장--------"<<"\n";
	std::ios state(NULL);
	state.copyfmt(cout);
	
	
	cout<< "--------4. sample code--------"<<"\n";
	cout<<"10칸 확보 우측 정렬 :"<<setw(10)<<right<<"test"<<"\n";
	cout<<"10칸 확보 좌측 정렬 :"<<setw(10)<<left<<"test"<<"\n"; 

      
	cout<<fixed<<setprecision(6)<<num<<"\n";
	return 0;	
}

 

 

 

 

참고사이트

http://www.cplusplus.com/reference/iomanip/

https://doitnow-man.tistory.com/234

 

 

 

728x90