스트림
입력과 출력을 위한 바이트들의 스트림
프로그램과 입력장치, 혹은 프로그램과 출력장치 사이의 매개체 역할을 한다.
표준화된 인터페이스를 제공함으로써, 입력 및 출력 장치의 종류에 상관없이 동일한 처리 방법을 제공한다.
입력스트림 Ex) Keyboard, Camera, File...
출력스트림 Ex) Monitor, File, Print
스트림 클래스 계층구조
표준입출력
표준입력 : stdin.cin
- 스트림 상태를 나타내는값
class ios {
// ... public: enum io_state { goodbit =0, eofbit =1, failbit =2, badbit =4, }; int eof() const; // end of file seen int fail() const; // next operation will fail int bad() const; // stream corrupted int good() const; // next operation might succeed}; |
get() : 단일문자 입력함수
getline()
istream& getline(char*, int, char='\n');
1번째 인자는 입력 문자열을 저장한 공간이며, 2번째 전달인자는 읽어들일 문자의수, 3번째 전달인자는 종료문자로 종료문자를 만나게 되면 지정된 개수의 문자를 읽기 전이라도 입력을 멈춘다.
ignore() : 문자열을 읽고 나서, 읽은 문자열을 버린다.
read() : 주어진 수의 바이트를 읽어서 지정된위치에 저장, 입력에 널문자는 붙이지 않는다.
peek() : 입력스트림으로부터 추출하는 일 없이 입력에 있는 다음문자를 반환
gcount() : 마지막 추출 맴버함수가 읽는 문자수를 반환
putback() : 어떤문자를 입력스트림에 다시 넣는다.
const int MAXLEN = 255; int main(void) { char input[MAXLEN]; cout << "[getline() 함수]" << endl; cout << "주소를입력하여주십시오: "; cin.getline(input, MAXLEN, '\n'); //종료문자열인'\n'을만날때까지문자열을읽어드림 cout << "ECHO : " << input << endl;
cout << "[get() 함수]" << endl; cout << "전화번호를입력하여주십시오: ";
char ch; cin.get(ch); //단일문자열 cout << "ECHO : "; while (ch != '\n'){ cout << ch; cin.get(ch); } cout << endl; return 0; } |
int main(void) { cout << "[peek() 함수]" << endl; cout << "주소를입력하여주십시오: "; //주소입력: xx동xx@ 102동307호=> 아파트를의미하는@문자를'아파트'로출력한다. char ch; while (cin.peek() != '\n'){ cin.get(ch); if (ch == '@'){ cin.putback(' '); cout << "아파트"; } else cout << ch; } cout << "\n[read() 함수]" << endl; cout << "전화번호를입력하여주십시오: "; cout.flush();
char input[5]; cin.read(input, 5); input[5] = '\0'; cout << input << endl; return 0; } |
표준출력 : stdout.cout
※ cout 객체를 이용하여 출력 int main(void) { char* name = "My name is Hong."; for (int i=0; i< (int)strlen(name); i++) cout.put(name[i]).put('.'); cout << endl; cout.write(name,strlen(name)).write("\n",1); return 0; } |
put() : 단일문자 출력함수, 연속출력이 가능하다.
write() : 전체 문자열을 출력한다.
※ 출력형식지정
width() : 출력시 폭을 지정, 바로 다음 출력되는 항목에만 영향을 준다
hex(), doc(), oct() : 16. 10. 8진법을 선택
precision : 부동 소수점의 출력시 정밀도를 설정
class ios { // … public : ostream* tie(ostream* s); // tie input to output ostream* tie(); // return “tie” int width(int w); // set field width int width() const; char fill(char); // set fill character char fill() const; // return fill character long flags(long f); long flags() const; long setf(long setbits, long field); long setf(long); long unsetf(long); int precision(int); // set floating point precision int precision() const; }; |
예제)
int main(void) { int iarr[5] = {10, 5, 105, 32, 6547}; double darr[5] = {10.1, 10.525, 10.23456, 10, 10.32}; int i;
cout << "[정수의출력]" << endl; cout.width(15); cout << "10진수"; // 출력시필드의폭을지정 cout.width(15); cout << "16진수"; cout.width(15); cout << "8진수" << endl;
for (i=0; i<5; i++){ cout.width(15); cout << dec << iarr[i] << " "; //10진수 cout.width(15); cout << hex << iarr[i] << " "; //16진수 cout.width(15); cout << oct << iarr[i] << endl; //8진수 }
cout << "\n[부동소수점수의출력]" << endl; cout.width(15); cout << "precision(2)"; cout.width(15); cout << "precision(5)" << endl;
for (i=0; i<5; i++){ cout.precision(2); //정밀도의자리수: 2 cout.width(15); cout << darr[i]; cout.precision(5); //정밀도의자리수: 5 cout.width(15); cout << darr[i] << endl; } cout << endl;
return 0; } |
표준 에러출력 : stderr.cerr
※ 모든 Built-in타입에 대해 "<<" 연산자 오버로딩 되어있다.
'Developer > C / C++' 카테고리의 다른 글
Namespace (0) | 2012.10.24 |
---|---|
스트림 - 파일 I/O (0) | 2012.10.24 |
예외처리 (0) | 2012.10.24 |
STL(Standard Template Library) for C++ (0) | 2012.10.23 |
템플릿 (클래스 템플릿, 함수 템플릿) (0) | 2012.10.23 |