[C++] cin.fail() | cin.clear() | cin.ignore()

2025. 5. 5. 20:47·C++

cin.fail()과 cin.clear()

  • cin.fail() : 숫자형 변수에 문자를 넣으려는 잘못된 시도를 할 경우 failbit 설정 --> 참(1) 반환
  • cin.clear() : 내부상태플래그 초기화 --> cin이 올바른 동작을 이어가도록 함

 

  • 정상적으로 값이 입력 되었는지 확인하기 위해 cin 객체의 내부 상태 플래그를 참조함
  • 아래 에러가 발생했는지 확인하는 방법 : cin의 fail(), eof(), bad(), good() 멤버함수 사용
failbit : 입력 실패. ex) 정수를 입력받아야하는데 문자를 입력하면 1이 됨
eofbit : 파일의 끝. ex) 더 이상 읽을 문자가 없는 경우 에러
badbit : 스트림 물리적 손상. ex) 더 이상 읽을 수 없어 에러 반환
goodbit : 위의 에러들 발생하지 X. ex) 이 경우 0 반환

 

 

  • 정수형 변수 a에 정수를 입력했을 때에는 goodbit가 반환되어 오류가 발생하지 않았지만, 문자를 입력하면 cin.fail() 함수의 반환값이 '참'이므로 조건문에 걸리는 것을 볼 수 있음.
  • 이후에 cin.clear()를 사용하여 내부플래그 초기화
  • cin.ignore()를 사용하여 입력버퍼를 비워줌
#include <iostream>
using namespace std;
int main()
{
	int a;
	while (true)
	{
		cin >> a;
		if (cin.fail())
		{
			cout << "비정상 입력!" << endl;
			cin.clear();
			cin.ignore(5, '\n');
		}
	}
}

 

 

 

cin.ignore()

  • 위의 코드에서 사용한 cin.ignore()에 대해 설명 시작! 
  • cin.ignore()는 버퍼를 비우기 위한 것! 
  • cin.ignore(5, '\n')
    • 첫번째 인자 : 읽어들일 문자의 갯수 --> 그래서 보통 어느 정도 큰 숫자를 적는다고 함
    • 두번째 인자 : 읽으들이면 종료할 문자
  • (ignore 함수는 C언의 fflush(stdin)과 비슷)
  • 5개 문자를 읽으라고 설정했기 때문에 길이가 5를 넘어가면 비워도 버퍼에 문자가 남아있음
  • 그래서 1번 더 실행됨!! 

'C++' 카테고리의 다른 글

[C++] 주요 vector 함수  (0) 2025.05.06
[C++] array 객체와 vector 객체  (0) 2025.05.06
[C++] 파일 입출력 (.txt 파일)  (0) 2025.05.05
[C++] 문자열 | string을 전달인자로 하는 함수  (0) 2025.05.02
[C++] 데이터 형변환  (0) 2025.05.02
'C++' 카테고리의 다른 글
  • [C++] array 객체와 vector 객체
  • [C++] 파일 입출력 (.txt 파일)
  • [C++] 문자열 | string을 전달인자로 하는 함수
  • [C++] 데이터 형변환
polibo
polibo
Polibo의 개발 성장기 지켜봐주십슈 (콩 싫어해요.)
  • polibo
    Polibo와 개발 콩나무 키우기
    polibo
  • 전체
    오늘
    어제
    • 분류 전체보기 (65)
      • Python (23)
      • C (32)
        • 본수업 (19)
        • 예습 (7)
        • 개인프로젝트01 - 로또 (3)
        • 개인프로젝트02 - 복켓몬 키우기 (2)
        • 개인프로젝트03 - 김복천국 POS기 (1)
        • 팀프로젝트01 - 용사 복이의 대모험 RPG (0)
        • 팀프로젝트02 - 메일 프로그램 (0)
      • TCP_IP (0)
      • DB (1)
      • C++ (7)
        • 개인프로젝트01 - 숫자야구 (0)
      • QT (1)
        • 개인프로젝트01 - 숫자야구 (0)
        • 팀프로젝트01 - 키오스크 (1)
        • 팀프로젝트02 - 퐘퐘이 (0)
        • 팀프로젝트03 - 개발의 민족 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    for문
    문자열
    while문
    파이썬 숫자야구
    if문
    C
    순서도
    c우선순위
    파이썬게임
    파이썬
    파이썬조건문
    c언어 scanf
    조건문
    Python
    c언어
    반복문
    코딩
    파이썬반복문
    파이썬예제
    else if
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
polibo
[C++] cin.fail() | cin.clear() | cin.ignore()
상단으로

티스토리툴바