cin.fail cin.clear cin.ignore
cin.fail() -> i/o 에러가 발생하면 true
cin.clear() -> cin객체의 내부 상태 플래그 초기화
cin.ignore(무시 문자 최대길이, 종료 문자) -> 현재 버퍼안에 있는 내용 무시
- cin.fail()이 true인 경우 -
1)
#include <iostream>
using namespace std;
void main()
{
int test;
cout << "input : ";
cin >> test;
cout << "\ncin.fail() test" <<endl;
cout << cin.fail() <<endl;
}
위와 같이 정수형 변수 test에 문자가 들어갈 경우에 cin.fail()은 플래그를 set(1) 합니다.
2)
#include <iostream>
using namespace std;
int main()
{
char test[10];
cout<<"input: ";
cin >> test;
cout<<"\ncin.fail() test"<<endl;
cout<< cin.fail() <<endl;
return 0;
}
char로 선언해도 NULL을 입력받은 경우에 cin.fail()은 플래그를 set(1) 합니다.
<- 빈 파일을 입력으로 했을 때
ex) cin.fail(), cin.clear(), cin.ignore()
#include <iostream>
using namespace std;
void main()
{
int val1;
while ( 1 )
{
cout << "첫번째숫자입력 : ";
cin >> val1;
if ( cin.fail() )
{
cin.clear();
cin.ignore(256, '\n');
cout << "숫자를잘못입력하셨습니다! 다시입력해주세요." << endl;
}
else
break;
}
}
위의 예제처럼 fail이 플래그를 set했을 때 cin.clear()로 플래그를 초기화해서 무한 루프를 막아준다.
위의 소스에서 cin.clear() 없이 문자를 입력하면 플래그 계속 1로 set되있으므로 무한루프에 빠지게 되죠