C++

C++ 조정자(Manipulator) 총정리

김구티2 2024. 3. 10. 09:14

1. 조정자(Manipulator)의 개념

조정자는 입출력 스트림을 수정할 수 있는 함수를 제공한다. 변수의 값을 변경한다는 것이 아니다. 삽입(<<)과 추출(>>) 연산자를 통해 입출력 스트림을 수정할 뿐이다. 조정자는 스트림의 형식 매개 변수를 변경하기 위해 I/O문에 포함될 수 있는 특수 함수다. 또한, 조정자는 데이터 디스플레이를 포맷하는 데 사용되기도 한다. 조정자에 엑세스하기 위해서는 iomanip.h 파일이 프로그램에 포함되어야 할 것이다.

 

예를 들어, 16진수 값을 100으로 프린트하기 위해서는 다음과 같이 할 수 있을 것이다.

cout<<setbase(16)<<100

2. 인수가 없는 조정자의 종류

조정자에는 다양한 종류가 존재한다. iostream 라이브러리에 의해 정의된 중요한 조정자들은 다음과 같다.

 

① endl: ostream에서 정의되는 것으로, 새 줄을 입력하는 데 사용된다. 새 줄을 입력한 후 플러시(즉, 화면이나 파일에 작성된 모든 출력을 강제로 수행) 출력 스트림이 진행된다.

② ws: istream에서 정의되며, 문자열 시퀀스의 공백을 무시하는 데 사용된다.

③ ends: ostream에 정의되어 있으며, 출력 스트림에 null 문자를 삽입한다. 일반적으로 std:ostrstream과 함께 작동하며, C 문자열로 처리하기 위해 관련 버퍼를 null-termination 해야 한다.

④ flush: ostream에서 정의되며, 출력 스트림을 플러시한다. 위에서도 언급했듯, 화면이나 파일에 쓰여진 모든 출력을 강제하는 것이다. 플러시가 없으면, 출력은 같더라도 실시간으로 나타나지 않을 수 있다.

 

예시:

#include <iostream>
#include <istream>
#include <sstream>
#include <string>

using namespace std;

int main()
{
     istringstream str("  Programmer");
     string line;
     // Ignore all the whitespace in string
     // str before the first word.
     getline(str >> std::ws, line);

     // you can also write str>>ws
     // After printing the output it will automatically
     // write a new line in the output stream.
     cout << line << endl;

     // without flush, the output will be the same.
     cout << "only a test" << flush;

     // Use of ends Manipulator
     cout << "\na";

     // NULL character will be added in the Output
     cout << "b" << ends;
     cout << "c" << endl;

     return 0;
}

 

출력:

Programmer
only a test
abc

3. 인수가 있는 조정자 종류

일부 조정자는 인수와 함께 사용된다. 이 모든 것은 헤더 파일에 저장되어 있다. 이러한 조정자를 사용하려면, 이 헤더 파일을 프로그램에 포함해야 한다. 예를 들어, std::cout << std::setw (6) << std::setfill (’*’); 라고 작성하면 최소 너비를 설정하고 빈 공간을 원하는 문자로 채울 수 있다. iomanip의 중요한 조정자는 다음과 같다.

 

① setw(val): 출력 작업에서 필드 폭을 설정하는 데 사용된다.

② setfill(c): 출력 스트림의 문자 c를 채우는 데 사용된다.

③ setprecision(val): val의 부동 소수점 값의 정밀도에 대해 새로운 값으로 설정한다.

④ setbase(val): 숫자 값의 숫자 기본 값을 설정하는 데 사용된다.

⑤ setiosflags(flag): 매개변수 마스크로 지정된 형식 플래그를 설정하는 데 사용된다.

⑥ resetiosflags(m): 매개변수 마스크에서 지정한 형식 플래그를 재설정하는 데 사용된다.

 

ios에서 중요한 조정자는 다음과 같다.

① showpos: 양수에 양의 부호를 나타내도록 강제한다.

② noshowpos: 양수에 양의 부호를 쓰지 않도록 강제한다.

③ showbase: 숫자 값의 숫자 베이스를 나타낸다. 

④ uppercase: 숫자 값에 대문자를 사용하도록 강제한다.

⑤ nouppercase: 숫자 값에 대해 소문자를 사용하도록 강제한다.

⑥ fixed: 부동 소수점 값에 10진법 표기를 사용한다.

⑦ scientific: 과학적 기수법으로 부동 소수점을 표기한다.

⑧ hex: 정수에 대한 16진수 값을 읽고 쓰면 setbase(16)과 동일하게 작동한다.

⑨ dec: 정수의 10진수 값인 setbase(10)을 읽고 쓴다.

⑩ oct: 정수의 8진수 값인 setbase(8)을 읽고 쓴다.

⑪ left: 출력을 왼쪽으로 조정한다.

⑫ right: 출력을 오른쪽으로 조정한다.

4. 조정자의 유형

일반적으로 사용되는 조정자에는 2가지 유형이 존재한다.

① 매개변수화되는 것 ② 매개변수화되지 않는 것

 

① 매개변수화되는 것

⑴ setw(int n)은 필드 폭을 n으로 설정하는 것으로, 두 변수 사이에 공백을 삽입하는 출력 조정자다. 필요한 공간과 동일한 정수 값을 입력해야 한다.

예시:

int a=15;  int b=20;
cout << setw(10) << a << setw(10) << b << endl; 
⑵ setprecision(int p)은 정밀도를 p로 고정한다. 부동 소수점 정수에 대해 소수점 뒤에 표시되도록 숫자를 제어하는 출력 조정자다. 

예시:

float A = 1.34255;
cout <<fixed<< setprecision(3) << A << endl;
⑶ setfill(Char f)은 채워 넣을 문자를 설정하는 것으로, 출력을 조작한다는 점에서 setw()과 유사하지만, 여기서 필요한 매개변수는 단일 문자다.

예시:

int a,b;
a=15;   b=20;
cout<< setfill(‘*’) << endl;
cout << setw(5) << a << setw(5) << a << endl;
⑷ setiosflags(long l)은 형식 플래그를 I로 설정한다.
⑸ resetiosflags(long l)은 I로 표시된 플래그를 제거한다.
⑹ setbase(int b)는 숫자의 베이스를 b로 설정하는 것으로, C++에서는 다음과 같은 base 값을 지원한다:

hex(16), oct(8), dec(10).

 

예시:

// Example:

#include <iostream> 
#include <iomanip> 

using namespace std;
main()
{

int number = 100; 

cout << "Hex Value =" << " " << hex << number << endl; 

cout << "Octal Value=" << " " << oct << number << endl; 

cout << "Setbase Value=" << " " << setbase(8) << number << endl; 

cout << "Setbase Value=" << " " << setbase(16) << number << endl; 


return 0;

}

 

출력:

Hex Value = 64
Octal Value= 144
Setbase Value= 144
Setbase Value= 64

 

② 매개변수화되지 않는 것

⑴ endl: 새 라인을 제공한다. 

⑵ ends: null 문자를 추가하여 출력 문자열을 닫는다. 

⑶ flush: 버퍼 스트림을 플러시한다. 

⑷ we: 첫 번째 필드 앞에 있는 선두 공백을 생략한다. 

⑸ hex, oct, dec: 숫자를 16진수, 8진수, 10진수 형식으로 표시한다.

 

예시:

// Example: ws – Omits the leading white spaces present before the first field

#include<iostream>
using namespace std;

int main() 


     char name[125]; 
     cout << "Enter your name" << endl; 

     cin >> ws; 

     cin.getline(name,125); 

     cout << name << endl; 

     return 0;
}

 

출력:

Enter your name
ram
ram

728x90

'C++' 카테고리의 다른 글

C++ Nested if문(중첩 if문) 총정리  (0) 2024.03.10
C++ if else if 총정리  (0) 2024.03.10
C++ cerr 총정리  (0) 2024.03.10
C++에서 cout 총정리  (0) 2024.03.09
C++에서 cin 총정리  (0) 2024.03.09