본문 바로가기
Programming/C/C++

cin.fail cin.clear cin.ignore

by bbolmin 2012. 4. 20.

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되있으므로 무한루프에 빠지게 되죠