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되있으므로 무한루프에 빠지게 되죠
'Programming > C/C++' 카테고리의 다른 글
프로그램 종료2 - atexit(), _exit() (0) | 2012.05.03 |
---|---|
프로그램 종료 - assert(), exit(), abort() (0) | 2012.05.02 |
PF_INET와 AF_INET (3) | 2012.04.30 |
헤더파일 중복 방지( inclusion guard / #pragma once ) (0) | 2012.04.23 |
c++ 파일 입출력 (fstream) (0) | 2012.04.07 |