본문 바로가기
프로그래밍/C++

C++ ] 입력 버퍼 비우기 , 문자를 입력하면 무한루프에 빠지는 문제 해결 / cin.clear() , cin.ingnore()

by eteo 2022. 6. 16.

 

정수형 값이 입력되어야 하는데 문자나 문자열이 들어왔을 때 무한루프에 빠지는 문제를 해결하는 방법은 다음과 같다.

 

 

 

대략 아래와 같이 추가해주면 된다.

 

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;
		}