Programming/C/C++2012. 4. 20. 10:55

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

 

Posted by bbolmin

댓글을 달아 주세요

  1. 좋은 정보 감사드려요. clear(), ignore(), fail() 메서드를 사용하는 방법을 정확히 알고 갑니다ㅎㅎ

    2012.10.08 13:07 [ ADDR : EDIT/ DEL : REPLY ]
  2. Mecca

    감사합니다! cin.ignore(), cin.clear() 사용법 잘 알아갑니다.

    2013.05.30 10:16 [ ADDR : EDIT/ DEL : REPLY ]