C++ 입출력 시스템
스트림(stream)
C++ 스트림 종류
C++ 입출력
C++ 표준은 스트림 방식만 지원
◼ 스트림 입출력은 모든 표준 C++ 컴파일러에 의해 컴파일됨
◼ 높은 호환성
char ch;
cin >> ch; // 키보드로 문자 입력. 한글 문자 읽을 수 없음
| 클래스 | 설명 |
|---|---|
| ios | 모든 입출력 스트림 클래스들의 기본(Base) 클래스. 스트림 입출력에 필요한 공통 함수와 상수, 멤버 변수 선언 |
| istream, ostream, iostream |
istream은 문자 단위 입력 스트림. ostream은 문자 단위 출력 스트림. iostream은 문자 단위로 입출력을 동시에 할 수 있는 스트림 클래스 |
| ifstream, ofstream, fstream |
파일에서 읽고 쓰는 기능을 가진 파일 입출력 스트림 클래스. 파일에서 읽을 때는 ifstream 클래스를, 파일에 쓸 때는 ofstream 클래스를, 읽고 쓰기를 동시에 할 때 fstream 클래스 이용 |
표준 입출력 스트림 객체
포맷 플래그
| 플래그 | 값 | 의미 |
|---|---|---|
| ios::skipws | 0x0001 | 입력시 공백 문자(스페이스, 탭, 개행문자)를 무시 |
| ios::unitbuf | 0x0002 | 출력 스트림에 들어오는 데이터를 버퍼링하지 않고 바로 출력 |
| ios::uppercase | 0x0004 | 16진수의 A~F, 지수 표현의 E를 대문자로 출력 |
| ios::showbase | 0x0008 | 16진수이면 0x를, 8진수이면 0을 숫자 앞에 붙여 출력 |
| ios::showpoint | 0x0010 | 실수 값에 대해, 정수 부분과 더불어 소수점 이하의 끝자리들을 0으로 출력 |
| ios::showpos | 0x0020 | 양수에 대해 + 기호 출력 |
| ios::left | 0x0040 | 필드를 왼쪽 맞춤(left-align) 형식으로 출력 |
| ios::right | 0x0080 | 필드를 오른쪽 맞춤(right-align) 형식으로 출력 |
| ios::internal | 0x0100 | 부호는 왼쪽 맞춤으로 숫자는 오른쪽 맞춤으로 출력 |
| ios::dec | 0x0200 | 10진수로 출력. 디폴트 설정 |
| ios::oct | 0x0400 | 8진수로 출력 |
| ios::hex | 0x0800 | 16진수로 출력 |
| ios::scientific | 0x1000 | 실수에 대해 과학 산술용 규칙에 따라 출력 |
| ios::fixed | 0x2000 | 실수에 대해 소수점 형태로 출력 |
| ios::boolalpha | 0x4000 | 설정되면, 논리값 true를 "true"로, false를 "false"로 출력하고, 설정되지 않으면, 정수 1과 0으로 출력 |
cout.unsetf(ios::dec); // 10진수 해제
cout.setf(ios::hex); // 16진수로 설정
cout.setf(ios::dec | ios::showpoint); // 10진수 설정, 소수점 이하 0으로 출력
조작자
| 조작자 | I/O | 용도 |
|---|---|---|
| endl | O | 스트림 버퍼를 모두 출력하고 다음 줄로 넘어감 |
| oct | O | 정수 필드를 8진수 기반으로 출력 |
| dec | O | 정수 필드를 10진수 기반으로 출력 |
| hex | O | 정수 필드를 16진수 기반으로 출력 |
| left | O | 왼쪽 맞춤으로 출력 |
| right | O | 오른쪽 맞춤으로 출력 |
| fixed | O | 실수 필드를 고정 소수점 방식으로 출력 |
| scientific | O | 실수 필드를 과학 산술용 방식으로 출력 |
| flush | O | 스트림 버퍼 강제 출력 |
| showbase | O | 16진수의 경우 0x로, 8진수의 경우 0을 앞에 붙여서 출력 |
| noshowbase | O | showbase 지정 취소 |
| showpoint | O | 실수 값에 대해, 정수 부분과 소수점 이하의 끝자리 이후 남은 공간을 0으로 출력 |
| noshowpoint | O | showpoint 지정 취소 |
| showpos | O | 양수인 경우 + 부호를 붙여 출력 |
| skipws | I | 입력 스트림에서 공백 문자를 읽지 않고 건너뜀 |
| noskipws | I | skipws 지정 취소 |
| boolalpha | O | 불린 값이 출력될 때, "true" 혹은 "false" 문자열로 출력 |
| 조작자 | I/O | 용도 |
|---|---|---|
| resetioflags(long flags) | IO | flags에 지정된 플래그들 해제 |
| setbase(int base) | O | base를 출력할 수의 진수로 지정 |
| setfill(char cFill) | O | 필드를 출력하고 남은 공간에 cFill 문자로 채움 |
| setioflags(long flags) | IO | flags를 스트림 입출력 플래그로 설정 |
| setprecision(int np) | O | 출력되는 수의 유효 숫자 자리수를 np개로 설정. 소수점(.)은 별도로 카운트 |
| setw(int minWidth) | O | 필드의 최소 너비를 minWidth로 지정 |
사용자 정의 조작자 함수 원형
istream& manipulatorFunction (istream& ins)
ostream& manipulatorFunction (ostream& outs)
삽입 연산자(<<)
추출 연산자(>>)