정수형 값이 입력되어야 하는데 문자나 문자열이 들어왔을 때 무한루프에 빠지는 문제를 해결하는 방법은 다음과 같다.
대략 아래와 같이 추가해주면 된다.
cin.clear() 는 현재 입력이 성공인지 실패인지 나타내는 내부 플래그를 초기화시키는 함수이고
cin.ignore() 가 입력 버퍼를 비우는 함수이다. 두번째 매개변수인 '\n' 문자가 나올때까지 비우는 것(해당 문자 포함)이고, 첫번째 매개변수는 byte 단위로 무시할 문자의 최대 개수를 뜻한다.
정석은 std::numeric_limits<std::streamsize>::max()을 쓰는 것인데 너무 기니까 INT_MAX를 쓰거나 적당히 큰 값을 입력해주면 된다.
cin.clear();
cin.ignore(1000,'\n');
문자가 입력된 경우를 예외처리 하지 않았을 때
아래와 같이 변수에 대입되지 못한 값이 계속 버퍼에 남아 무한루프에 빠지게 한다.
아래와 같이 입력 버퍼 비우는 문구를 추가했을 때
이 문제를 해결할 수 있다.
else {
cin.clear();
cin.ignore(1000, '\n');
cout << "다시 선택해 주세요." << endl;
Sleep(500);
return false;
}
'프로그래밍 > C++' 카테고리의 다른 글
C++ ] 2021 교통사고 통계자료 필터 프로그램 (1) + 파일 입출력 (0) | 2022.06.28 |
---|---|
C++ ] 상속을 이용한 주차타워 (0) | 2022.06.24 |
C++ ] 상속/가상함수를 이용한 동물호텔 (0) | 2022.06.24 |
C++ ] 클래스를 활용한 자판기 프로그램 + 함수 뒤에 붙는 const의 의미 (0) | 2022.06.16 |
C++ ] 자판기 프로그램 (0) | 2022.06.16 |