-
[cin] 입력 실패를 처리하는 법개발/C·C++ 2021. 3. 29. 23:09
문자 하나씩만 입력하면 문제가 없는데, 두 개 이상 입력하면 버퍼에 남아 있는 것이 차례대로 출력된다. ab를 입력하면 a, b가 출력되고 abc를 입력하면 ab가 출력된다. 아직 버퍼에 c가 남아 있지만 cin 객체를 두 번 호출했기 때문에 a, b만 나온다. 문자를 얼마나 입력하든 최초 입력하는 문자 하나만 출력하고 싶다면 어떻게 해야 할까. 쉽게 생각해서 두 번째부터 등장하는 문자는 모두 무시하면 된다.
cin에 ignore() 함수가 있다. 첫 번째 인자는 무시할 갯수를 넣으면 되는데 어느 길이의 문자를 넣을지 모르기 때문에 정수로 표현할 수 있는 가장 큰 값을 넣어주자. limits 헤더를 인클루드해서 다음과 같이 사용해주면 된다. streamsize는 long long으로 최소 64비트 정수를 의미한다. ignore()의 두 번째 인자는 구분자를 넣는 것인데 '\n'을 넣어주면 엔터를 입력할 때까지의 모든 문자를 무시할 수 있다.이번에는 숫자를 입력받아보자. 하지만 문자를 넣으면 어떻게 될까?
cin.fail()을 출력해보면 1이 나온다. 입력스트림에서 오류가 발생했기 때문에 true가 리턴된 것. 이 때에는 오류 플래그를 초기화해주면 된다. cppreference를 보면 clear() 함수는 스트림 에러 플래그에 디폴트 값을 할당한다고 나와 있다. 그 값은 ios_base::goot_bit라는 변수고 실제 값은 0이며 no error을 의미한다. 문자들을 입력했을 때 clear() 를 호출해도 버퍼에 남아 있는 값들을 무시해주기 위해 ignore() 함수를 호출해준다.
'개발 > C·C++' 카테고리의 다른 글
음수 표현(feat.2의 보수) (0) 2021.04.03 Sequence point (0) 2021.03.30 가상 함수와 가상 함수 테이블 (0) 2019.12.11 티스토리에 코드 넣기(SyntaxHighlighter) (0) 2019.11.28 BitConverter.ToIntXX() 함수 구현해보기 (0) 2019.11.06