cin으로 숫자를 입력받을 때 문자를 입력하면 cin이 실패 상태가 되며, 이 상태를 처리하지 않으면 프로그램이 무한루프에 빠질 수 있다. 이를 방지하기 위해 cin.fail()로 입력 실패 여부를 체크하고, cin.clear()와 cin.ignore()를 통해 오류 상태 플래그를 초기화하고 입력 스트림을 정리해야 한다.
#include <iostream>
using namespace std;
int main() {
int number;
while (true) {
cout << "숫자를 입력하세요: ";
cin >> number;
if (cin.fail()) {
cout << "잘못된 입력입니다. 숫자를 입력하세요." << endl;
cin.clear(); // 오류 상태 플래그 초기화
cin.ignore(INT_MAX, '\n'); // 입력 스트림 정리
continue;
}
cout << "입력한 숫자: " << number << endl;
break;
}
return 0;
}
cin.fail()입력이 실패했는지(잘못된 입력이 들어왔는지)를 확인하는 함수
true를 반환, 성공하면 false를 반환한다.int number;
cin >> number;
if (cin.fail()) {
cout << "입력 오류 발생!" << endl;
}
cin.clear()입력 실패 상태(오류 플래그)를 초기화하는 함수
cin.fail() 상태가 true일 때, 이 함수를 호출해야 cin이 다시 정상적으로 작동할 수 있다.
cin.clear(); // 오류 상태 플래그 초기화
cin.ignore()입력 스트림에 남아 있는 데이터를 무시(제거)하는 함수
입력 오류가 발생한 뒤 스트림에 남아 있는 잘못된 데이터를 제거할 때 사용한다.
cin.ignore(n, '\n');
n: 최대 n개의 문자를 무시
'\n': 줄바꿈 문자가 나올 때까지 무시