Programming/C++

입출력 개요에 대한 두 번째 정리

byeong07 2018. 6. 6. 15:45

- 표준 입력 객체 cin

 

cin은 Console Input의 약어로 "콘솔 입력"을 의미합니다.

 

cout처럼 객체로 존재하며, C의 scanf()라 생각하면 됩니다.

 

하지만 scanf()보다 더 사용하기 편리합니다.

 

- 기본 입력

 

 

cin은 cout과 방향이 반대입니다.

 

<<이 아니라 >>입니다.

 

cout은 scanf()와 다르게 &를 붙일 필요가 없습니다.

 

cout의 내부에서 &를 이용합니다.

 

출력 결과를 보면 출력된 것 같은데 오른쪽에 있는 출력 결과는 이상이 있습니다.

 

iNum에 "205-11+60"을 입력했더니 다르게 출력이 되었습니다.

 

문제는 간단합니다.

 

cin이 내부적으로 사용하는 입력 버퍼에서 문제가 생겼기 때문입니다.

 

cin은 int를 int로 인식하기 때문에 숫자가 아닌 값은 받아들이지 않습니다.

 

그래서 "205"까지 입력을 받은 것이며 나머지 "-11+60"은 입력 버퍼에 남게 됩니다.

 

마찬가지로 dNum은 double이니까 "-11"까지 읽고, Buffer는 char 배열이므로 "+60\n"까지 읽습니다.

 

입력할 때 enter를 쳤기 때문에 개행 문자인 '\n'도 입력 버퍼에 남게 됩니다.

 

입력 버퍼의 상황을 나타낸 그림입니다.

 

 

이렇게 입력 버퍼에서 해당되는 자료형이 받아들일 수 있는 값만 읽어오니까 주의해야 합니다.

 

- get, getline

 

 

cin에는 get()이란 메서드가 있는데 하나는 반환 값으로 처리하고, 다른 하나는 인자로 처리합니다.

 

get()을 이용하면 입력 버퍼를 비울 수 있는데 알고리즘은 C와 동일합니다.

 

'\n'이 나오기 전까지 계속 읽으면 됩니다.

 

getline()은 scanf("%[^\n]")과 같다고 생각하면 됩니다.

 

getline() '\n'이 나오기 전까지 입력을 받습니다.

 

getline()의 매개변수는 3개인데 _Delim이란 매개변수는 기본 인자로 '\n'을 갖습니다.

 

즉 변경도 가능합니다.

 

 

- fail, bad, eof, good, rdstate, setstate, clear

 

 

cin은 입력의 성공 여부에 따라 처리하는 방식이 있습니다.

 

cin의 현재 상태는 rdstate()로 알아낼 수 있으며, setstate()나 clear()로 상태를 변경시킬 수 있습니다.

 

입출력 스트림의 오류는 goobbit, eofbit, badbit, failbit로 분류됩니다.

 

이런 것들은 상수입니다.

 

 

 

 

입출력 스트림의 오류를 판단하는 함수는 good(), eof(), bad(), fail()인데 비트 마스크를 사용합니다.

 

goobit, eofbit, failbit, badbit에 비트 마스크를 씌우면 true인지 false인지 알 수 있습니다.

 

 

- ignore, peek

 

 

 

ignore()는 지정한 길이 안에서 지정한 문자가 나오기 전까지의 모든 값을 무시하게 됩니다.

 

따라서 "620+7702"를 입력하면 "620+"는 버려지고 "7702"만 남게 됩니다.

 

peek()는 버퍼에 남아있는 값을 알려줍니다.

 

"122*1002"를 입력하면 "122"까지 입력이 되고 "*1002"가 남게 되는데 이 때 peek()를 사용하면 "*"를 읽어올 수 있습니다.

 

 

- 유니코드 입출력

 

멀티바이트 문자를 다뤘는데 이번에는 유니코드에 대해 정리하겠습니다.

 

유니코드를 사용하려면 wcout과 wcin을 이용하면 됩니다.

 

 

유니코드를 설정하려면 _setmode(_fileno(stdout), _O_U16TEXT) 이렇게 해야 합니다.

 

stdout은 wcout과 관련된 설정이며, stdin은 wcin과 관련된 설정입니다.

 

C에서 사용했던 locale.h는 통하지 않습니다.

 

하지만, _setmode()는 C에서도 사용할 수 있습니다.

 

유니코드는 console 창에서 사용하는 일은 많지 않습니다.

 

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

Inline 함수, 매크로 함수  (0) 2018.09.10
c++ 입출력 개요  (0) 2018.06.06