std::cin::fail / std::cin::clear / std::cin::ignore

2024. 12. 26. 17:17·내배캠/C++
int GetValidInteger()
{
	int Value;
	while (1)
	{
		cin >> Value;
		if (cin.fail())
		{
			cin.clear();
			cin.ignore(numeric_limits<streamsize>::max(), '\n');
		}
		else break;
	}
	return Value;
}

사용자 입력 값이 유효한지 검증해서 값을 사용하기 위해 함수를 만들었다.

 

이 과정에서 cin::fail, cin::clear, cin::ignor 는 C++에서 표준 입력 스트립 std::cin과 관련된 입력 처리 및 오류 제어를 다룰 때, 자주 사용되는 함수라는 것을 알게 되었다.

 

std::cin::fail

  • 입력 도중 예기치 않은 데이터 유형을 입력하거나 입력 스트림에 오류가 발생하면 스트림은 "실패 상태"가 된다.
  • 입력 스트림 std::cin 이 "실패 상태"인지를 확인하고 맞다면 true를, 정상 상태라면 false를 반환한다.
  • "실패 상태"라면 추가 입력이 더 이상 처리되지 않는다.

 

std::cin::clear

  • 입력 스트림의 "실패 상태"를 초기화해, 스트림을 다시 "정상 상태"로 만들어 재사용 가능하게 만든다.
  • cin::fail 상태를 복구할 때 사용함으로 주로 같이 사용된다.

 

std::cin::ignore

std::cin.ignore(count, delimiter);

cin.ignore(numeric_limits<streamsize>::max(), '\n');
  • 잘못된 입력이 입력 스트림에 남아 있는 경우, 이를 무시해서 프로그램이 정상적으로 작동하도록 한다.
  • 스트림 버퍼에 남아있는 불필요한 데이터를 count개 만큼 제거하거나 특정 문자가 나올 때 까지 제거한다.
  • count: 무시할 최대 문자 수를 의미한다.(기본 값: 1)
  • delimiter: 멈출 지점이 될 문자를 의미한다.
  • 아래 코드와 같이 사용한다면, 개행문자가 나올 때 까지 입력 스트림에서 최대 크기의 데이터를 제거한다는 의미이다.

 

std::numeric_limits<T>

  • C++ 표준 라이브러리 템플릿 클래스이다.
  • 데이터 타입별로 숫자와 관련된 속성을 정의하고, 타입의 한계를 제공하기 위해 설계되었다.
  • max()는 타입의 최대값, min()은 타입의 최소값을 의미하고 이 밖에도 많은 정적 멤버 함수들이 있다.
  • 위 코드에서 사용되었던 streamsize는 스트림의 문자 개수 혹은 데이터 크기를 표현하는 타입이다.

'내배캠 > C++' 카테고리의 다른 글

std::rand / std::srand / std::time  (0) 2024.12.26
std::fixed / std::setprecision  (0) 2024.12.26
std::transform  (1) 2024.12.26
템플릿 함수  (0) 2024.12.24
스마트 포인터  (0) 2024.12.24
'내배캠/C++' 카테고리의 다른 글
  • std::rand / std::srand / std::time
  • std::fixed / std::setprecision
  • std::transform
  • 템플릿 함수
동그래님
동그래님
  • 동그래님
    개발자 동그래
    동그래님
  • 전체
    오늘
    어제
    • 분류 전체보기 (210)
      • 공부 (51)
        • Code Cata (50)
      • 내배캠 (151)
        • TIL (50)
        • C++ (37)
        • Unreal Engine (48)
        • GAS(Gameplay Ability System.. (16)
      • Project (7)
        • Gunfire Paragon (5)
        • Arena Fighters (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    동그래님
    std::cin::fail / std::cin::clear / std::cin::ignore
    상단으로

    티스토리툴바