[[완료]]C++ cint 관련 질문
글쓴이: choboja / 작성시간: 금, 2010/03/26 - 3:11오후
c++ 입문자입니다.
#include<iostream> #include <string> using namespace std; int main() { float a = 0; float b = 0; char k; if(cin>>a) { cout << "good" << endl; } else cout << "error"<< endl; if(cin >> b) cout << "good job" << endl; else cout << "bad" << endl; return 0; }
궁금한 것이 만약 처음에서 a가 float 타입인데 숫자가 아닌 캐릭터를 입력하게 되면
아래에서 입력받는 b부분은 입력을 받지 않고 그냥 bad라는 결과를 출력하게 됩니다.
제 생각은 처음 if에서 잘못된 입력이 들어오면 else에서 error라는 메시지를 출력하고 밑에서는 정상적으로 인풋을 받아야할 것 같은데요..
자동적으로 bad라는 문자를 출력하는 것이 이상하네요.
어떻게 된건지 궁금합니다.
Forums:
무플.. ㅡㅡ;
너무 간단해서 그런가요? ㅡㅡ;
잘못된 입력을
잘못된 입력을 받으면 cin 스트림에 오류 플래그가 서게 됩니다.
따라서 그 뒤로는 그냥 입력을 안 받게 되지요.
오류가 있는지 확인하려면 cin.fail()을 호출하시면 되고, cin.clear()로 오류 플래그를 제거할 수 있습니다.
---8< 서명 -----------------
애니메이션 감상 기록 http://animeta.net/
답변 감사합니다.
cin.fail()은 실패시에 1을 리턴해주네요.
그런데 cin.clear()를
a에 캐릭터를 받고
코드 사이에 넣어도 오류 플래그가 리셋되지는 않네요?
그대로 밑에도 bad가 출력이 되네요.
그렇다면 오류가 발생하게 되면 예외처리를 해야하나요?
플래그가 리셋이 안되면 한번 입력을 잘못받으면 프로그램을 사용할 수 없는건가요??
음..
플래그*만*
플래그*만* 리셋됩니다.
버퍼엔 그대로 아직 남아있습니다. 버리세요. cin.ignore()
OTL
음... fail bit라고 있군요.
참고 사이트
http://msdn.microsoft.com/en-us/library/71t65ya2.aspx
In this example, cin sets the fail bit on the stream when it encounters non-numeric characters. The program clears the fail bit and strips the invalid character from the stream to proceed.
음. 잘못된 입력이 들어오면 fail bit를 set시키고 그 페일 비트를 clear시키고 임의의 다른 character로 잘못된 인풋을 받아들이는 형식이네요. 음.
제 이해가 맞겠죠~ ㅎㅎ
댓글 달기