>백엔드 개발 >C++ >C에서 `atoi()` 이외의 숫자 입력을 확인하는 방법은 무엇입니까?

C에서 `atoi()` 이외의 숫자 입력을 확인하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-21 21:01:12296검색

How to Validate Numeric Input in C   Beyond `atoi()`?

C에서 숫자 입력 유효성 검사

정수 입력을 처리하는 프로그램에서는 사용자가 유효한 숫자를 제공하는지 확인하는 것이 중요합니다. 불행하게도 atoi() 함수는 여러 자리 정수를 처리할 때 부족합니다. 이 문서에서는 숫자 입력을 확인하는 대체 방법을 살펴봅니다.

failbit 사용

C의 입력 스트림(cin)은 구문 분석할 수 없는 입력을 발견할 때 실패 비트를 설정합니다. 이는 다음과 같이 입력 유효성을 검사하는 데 활용될 수 있습니다.

int n;
cin >> n;
if(!cin) {
    // User did not input a number
    cin.clear();
    cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
  • if(!cin)은 Failbit이 설정되어 있는지 확인합니다.
  • cin.clear()는 스트림 상태를 재설정합니다.
  • cin.ignore()는 잘못된 입력을 건너뛰고 다음을 허용합니다. 다시 입력하세요.

입력 오버플로 처리

정수가 최대 허용 값을 초과하면 cin은 실패 비트도 설정합니다. 이를 방지하려면 입력을 읽기 전에 스트림 상태를 확인하세요.

while(!cin.eof()) {
    int n;
    cin >> n;
    if(!cin) {
        // Input error occurred
        cin.clear();
        cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
    else {
        // Valid input
        process(n);
    }
}

이 루프는 파일 끝(EOF)에 도달할 때까지 계속해서 입력을 읽고 유효성을 검사합니다.

기타 대안

  • C 11's stringstream: 입력에서 문자열 스트림을 생성하고 이를 정수로 변환해 봅니다.
  • 정규식(regex): 정규식을 사용하여 특정 숫자 형식을 적용합니다.
  • Boost 라이브러리: Boost의 Boost::regex 또는 Boost::lexical_cast를 사용합니다. 입력 유효성을 검사합니다.

위 내용은 C에서 `atoi()` 이외의 숫자 입력을 확인하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.