2009년 04월 12일
cin.get() 함수

실수할 수 있는 문제
---------------------------------
cin.get(text, sizeof(text)).get();
cin.clear();
---------------------------------
get() 함수가 빈 행을 입력받을 경우 cin에 failbit가 설정된다.
아무 생각없이 저렇게 cin.clear()해주면 failbit가 해지됐다고 생각하고 또 다시 get() 함수 등을 이용해 입력을 받을려고 하면 제대로 입력을 받지 못한다.

그이유는 이렇다.

저렇게 쓰면 cin.get(text, sizeof(text))함수가 빈 행을 입력받으면 바로 failbit가 설정된다. 그 상태에서 get()함수를 호출해봐야(여기서 get()함수는 개행문자를 제거하려는 목적으로 쓰였다.) 버퍼에 있는 개행문자가 제거가 안된다. 그 상태에서 cin.clear()하면 failbit는 해지됐지만 아직 버퍼에는 개행문자가 남아 있기 때문에 또 다시 get() 함수 등을 이용해 입력받으려고 하면 입력을 제대로 못받는 것이다.

따라서 위에 것은 이렇게 해줘야 한다.
---------------------------------------
cin.get(text, sizeof(text))
cin.clear();
cin.get();
---------------------------------------
즉, clear() 먼저 해주고 나서 get() 함수를 적용시켜야 한다.

실수하지 말자

by 임준성 | 2009/04/12 02:43 | 트랙백 | 덧글(0)
트랙백 주소 : http://limjunsung.egloos.com/tb/1368903
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글



<< 이전 페이지 | 다음 페이지 >>