본문 바로가기

C,C++

C++] Stream I/O function(get, getline, ignore,put)

Formatted I/O

▶ 입력

istream 멤버 함수, get()

argument에 따라서 수행하는 일이 다르다.

ⓐ no argument

- 스트림으로부터 입력된 한 문자(공백도 가능)를 리턴한다.

- 만약 end-of-file을 만났을 경우 EOF를 리턴한다.

ⓑ with a character-reference argument

- character reference argument에 스트림으로부터 입력된 한 문자를 저장하고 istream 객체의 참조를 리턴한다.

ⓒ with three arguments(a character array, a size limit, a delimiter)

- 스트림으로부터 입력된 char를 읽고 char array에 저장하고 default delimiter은 '\n'이다.

- (size limit-1) 만큼의 문자들을 읽거나 delimiter을 읽었을 때 종료된다.

- 자동으로 마지막에 '\0' 문자를 삽입해준다.

※'\n'과 같은 delimiter 처리 X

+)

윈도우에서는 개행문자(CR+LF) 방식(2바이트)

C++의 cin을 사용하여 개행문자가 입력될 때 LF(\n)은 버퍼에 남지만 CR(\r)은 남지 않는다.

따라서 cin 입력 시 \r은 무시하고 \n을 개행문자로 인식한다.

 

istream 멤버함수 getline()

istream& getline(char* str, streamsize n, char delimiter);

- char* str(변수 주소): string 타입 X, cstring 문자열 방식 O

- streamsize n(최대 입력 수): 위 get 3가지 argument처럼 n-1개의 문자를 문자형 배열에 저장하고 마지막에 자동 null 삽입

- char delimiter(제한자): 저장X, 삭제 O. 마찬가지로 default값은 '\n'.

 

string 멤버함수 getline()

istream& getline(istream& is, string& str, char delimiter);

- istream& is(입력 스트림): e.g.cin,ifs(ifstream) 등

- string& str(string 객체)

- char delimiter(제한자): 저장X, 삭제O. 마찬가지로 default값은 '\n'

 

istream 멤버함수 ignore()

istream& ignore(numeric_limits::max(), int delimiter);

- numeric_limits::max()(추출할 문자의 수): 입력 스트림으로부터 numeric_limits::max()만큼의 문자를 버린다.

- int delimiter(구분 문자): 지정된 구분 기호(포함)까지 스트림의 문자를 삭제한다.

※cin.ignore(); 은 버퍼 전체를 비우는 것이 아니라 맨 앞의 문자 '하나'를 비운다.

+) cin.clear()함수는 입력 버퍼를 비우는 것이 아닌 stream을 good state 상태로 set하는 함수이다.

 

C++] Stream I/O

Stream I/O in C++ ⓐ C++ 은 type-safe Input/Ouput을 사용한다. type-safe란 쉽게 말해 각각의 I/O operation이 데이터 타입에 민감한 것을 말한다. 따라서 정의되지 않은 데이터 타입에 대해 연산을 수행할 경우,

tibetyo.tistory.com

따라서 버퍼를 비우기 위해서는 cin.ignore() 함수를 추천한다.

 

입력 시, 주의할 점

※ cin으로 입력받을 경우, '\n'를 처리하지 않으므로 입력버퍼에 '\n'를 남겨둔다.

※ getline()은 개행문자를 입력버퍼에 가져와서 처리한다.

따라서 입력버퍼에 개행문자가 존재한다면 getline(cin,str)의 경우, str에 '\n'가 전달되며, '\n'을 제거 후 str에 ''을 담는다.

 


▶ 출력

ostream 멤버함수 put()

ostream& put(char c)

- char c: 문자 하나 c의 값을 출력한다.