본문 바로가기
Computer & Program/잡다한 이모저모

[C++]cin의 함정 피하기

by TDRemon 2009. 7. 18.
반응형
C/C++ 코딩을 하는 사람이라면 이런 오류로 골머리를 썩은 적은 최소한 한번은 있을 것이다. 만약에 없다면 이 글은 볼 필요가 없다. 내용은 즉슨 cin or scanf 등으로 키보드로부터 값일 입력 받는데 int 형을 받아야 하는데 char가 들어온다던지 하면 이상한 error가 뜬다. 라기보다 프로그램 실행 중이면 무한 loop에 빠지게 된다. 그것을 막아주는 아주 요긴한 코드를 설명하려고 한다.

참고로 환경은 C++이다. 제목부터 cin이기 때문이다. ㅋㅋ

우선 헤도파일로 #include <limits>를 넣어 준다. 이것을 넣어 주는 이유는 INT_MAX를 사용하기 위해서이다.
그리고 cin을 통해 값을 입력 받고나면 그 아래줄에 (이후부터는 말보다는 코드와 주석으로 설명하겠다. 그게 보기 편함으로...)while(!cin)     // 에러 플래그로 정확하지 않은 데이터를 입력하면 이 값이 TRUE로 됨
{
cin.clear();     // 에러 플래그를 지우기 위해 cin에 있는 clear 함수를 사용
cin.ignore(INT_MAX, '\n');     // ignore는 cin의 입력 버퍼에 남은 문자를 삭제
// 그리고 다시 키보드로부터 값 입력 받음
}

이다. 참고로 여기서 예는 int temp를 받는데 char* or string형이 들어 왔을 때 생기는 에러를 고쳐주는 코드로 나와있었다. 솔직히 temp를 double이나 char*로 했을 때도 위와 같은 코드가 제대로 작동할 지는 미지수이다. 하지만 어딘가에 그런것도 다 체크해주는 방법이 있을테니 limits의 헤더 파일 안을 보라고 권하고 싶다.
반응형

'Computer & Program > 잡다한 이모저모' 카테고리의 다른 글

[C++]inline Function  (0) 2009.07.22
[C++]Function Template  (1) 2009.07.18
01.리눅스 개요 - 리눅스 역사  (0) 2009.07.16
유닉스 기본 명려어  (0) 2009.07.06
특수기호 이름들  (0) 2009.07.06

댓글