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하는 함수이다.
따라서 버퍼를 비우기 위해서는 cin.ignore() 함수를 추천한다.
입력 시, 주의할 점
※ cin으로 입력받을 경우, '\n'를 처리하지 않으므로 입력버퍼에 '\n'를 남겨둔다.
※ getline()은 개행문자를 입력버퍼에 가져와서 처리한다.
따라서 입력버퍼에 개행문자가 존재한다면 getline(cin,str)의 경우, str에 '\n'가 전달되며, '\n'을 제거 후 str에 ''을 담는다.
▶ 출력
ostream 멤버함수 put()
ostream& put(char c)
- char c: 문자 하나 c의 값을 출력한다.
'C,C++' 카테고리의 다른 글
C,C++] 구조체(struct) (0) | 2023.09.13 |
---|---|
C++] Stream I/O function(read, gcount, write) (0) | 2023.08.12 |
C++] Stream I/O (0) | 2023.07.30 |
C] 표준 입출력 방법 정리(scanf,printf,fgets,getchar,fgetc 등) (0) | 2023.07.19 |
C++] 빠른 입출력 방법(endl,'\n',cin.tie(NULL), ios_base::sync_with_stdio(false)) (0) | 2023.07.18 |