728x90
cin을 통해 문자를 입력받을 경우
바로 변수에 값이 저장되는게 아닌
입력한 문자가 입력버퍼에 저장되고
버퍼에 저장된 값을 읽어들여 변수에 저장한다.
그리고 숫자를 입력받을 경우에는
바로 변수에 저장하기 때문에 버퍼가 필요하지 않다.
그런데 cin을 통해서 숫자를 입력받아
정수형 변수에 입력하는 도중에
문자가 입력되면 이 문자는 입력버퍼에 저장되고
cin을 통해 이 입력버퍼에 있는 값을 읽어들여
정수형 변수에 저장하려고 하기 때문에
정상적으로 저장이 되지 않고 계속 failbit를 설정하며
버퍼에도 값이 계속 남아있게 되는 것입니다.
clear() 함수를 통해서 에러비트를 초기화해주면
더이상 cin.fail() 함수의 반환값이 참이 아니게 된다.
하지만
입력버퍼에 아직도 문자가 남아있기 때문에
그 값을 읽어들여 다시 int형 변수 a에 저장하려 해서
계속해서 failbit가 새로이 설정되며 반복되는 것입니다.

ignore라는 함수를 사용하면 됨.
C언어 fflush(stdin)과 비슷.
이 함수는 인자 두 개를 넣을 수 있는데요
첫 번째는 읽어들일 문자의 개수, 두 번째는 읽어들이면 종료할 문자입니다.
입력버퍼에 있는 문자를 최대 첫 번째 인자로 지정한 수만큼 읽어들여 버리고,
그리고 두 번째 인자로 지정한 문자를 읽어들이면
그 문자를 마지막으로 읽어들여 버리고 함수가 종료됩니다.
cin.ignore(5, '\n')
입력한 글자가 5개가 넘으면 2번 실행됨.
728x90
'C++' 카테고리의 다른 글
타입 캐스트 연산자 (0) | 2022.10.28 |
---|---|
C++ 배열 2 주소값 (0) | 2022.10.28 |
C++ 배열 1 (0) | 2022.10.28 |
반복문(do-while,while,for,더블루프) (0) | 2022.10.28 |
switch (0) | 2022.10.28 |