ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [cin] 입력 실패를 처리하는 법
    개발/C++ 2021. 3. 29. 23:09

    문자 하나씩만 입력하면 문제가 없는데, 두 개 이상 입력하면 버퍼에 남아 있는 것이 차례대로 출력된다. ab를 입력하면 a, b가 출력되고 abc를 입력하면 ab가 출력된다. 아직 버퍼에 c가 남아 있지만 cin 객체를 두 번 호출했기 때문에 a, b만 나온다. 문자를 얼마나 입력하든 최초 입력하는 문자 하나만 출력하고 싶다면 어떻게 해야 할까. 쉽게 생각해서 두 번째부터 등장하는 문자는 모두 무시하면 된다.


    cin에 ignore() 함수가 있다. 첫 번째 인자는 무시할 갯수를 넣으면 되는데 어느 길이의 문자를 넣을지 모르기 때문에 정수로 표현할 수 있는 가장 큰 값을 넣어주자. limits 헤더를 인클루드해서 다음과 같이 사용해주면 된다. streamsize는 long long으로 최소 64비트 정수를 의미한다. ignore()의 두 번째 인자는 구분자를 넣는 것인데 '\n'을 넣어주면 엔터를 입력할 때까지의 모든 문자를 무시할 수 있다.

     

    이번에는 숫자를 입력받아보자. 하지만 문자를 넣으면 어떻게 될까?

    잘못된 입력이라서 0이 출력되며 두 번째 cin 입력이 무시된 채로 두 번째 cout에서도 0이 출력된다

    cin.fail()을 출력해보면 1이 나온다. 입력스트림에서 오류가 발생했기 때문에 true가 리턴된 것. 이 때에는 오류 플래그를 초기화해주면 된다. cppreference를 보면 clear() 함수는 스트림 에러 플래그에 디폴트 값을 할당한다고 나와 있다. 그 값은 ios_base::goot_bit라는 변수고 실제 값은 0이며 no error을 의미한다. 문자들을 입력했을 때 clear() 를 호출해도 버퍼에 남아 있는 값들을 무시해주기 위해 ignore() 함수를 호출해준다.

     

    '개발 > 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

    댓글

Designed by Tistory.