>백엔드 개발 >C++ >C에서 잘못된 데이터 유형 입력으로 인해 발생하는 무한 루프를 어떻게 방지할 수 있습니까?

C에서 잘못된 데이터 유형 입력으로 인해 발생하는 무한 루프를 어떻게 방지할 수 있습니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-21 08:53:09285검색

How Can I Prevent Infinite Loops Caused by Incorrect Data Type Input in C  ?

C에서 잘못된 데이터 유형 입력 처리

C 프로그램을 개발할 때, 특히 특정 유형이 예상되는 경우 사용자 입력을 강력하게 처리하는 것이 중요합니다. 데이터 유형. 예상된 유형에서 벗어나는 입력은 무한 루프와 같은 프로그램 오작동으로 이어질 수 있습니다.

프로그램에서 사용자에게 정수를 입력하라는 메시지를 표시했지만 사용자가 실수로 문자를 입력하는 시나리오를 생각해 보겠습니다. 프로그램이 이 유효하지 않은 입력을 처리하지 못하면 무한 루프에 들어가 문자를 수신함에도 불구하고 계속해서 정수를 요청합니다.

이 문제의 근본 원인은 std::cin의 "잘못된 입력" 설정입니다. " 잘못된 입력이 발견되면 플래그를 지정합니다. 이 문제를 해결하려면 이 플래그를 지우고 입력 버퍼에서 잘못된 입력을 삭제해야 합니다.

다음 코드 조각은 이를 수행하는 방법을 보여줍니다.

while (std::cout << "Enter a number" && !(std::cin >> num)) {
    std::cin.clear(); // Clear bad input flag
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // Discard input
    std::cout << "Invalid input; please re-enter.\n";
}

이 코드에서 while 루프는 입력이 실패하는 한(즉, 읽은 문자가 없는 한) 실행됩니다. 루프 내에서 cin.clear()는 잘못된 입력 플래그를 지우고 cin.ignore()는 버퍼에서 잘못된 입력을 삭제합니다. 그런 다음 프로그램은 사용자에게 유효한 숫자를 다시 입력하라는 메시지를 표시합니다.

또는 std::stoi 또는 변환 확인이 가능한 다른 방법을 사용하여 입력을 문자열로 얻은 후 정수로 변환할 수도 있습니다. 이 접근 방식을 사용하면 변환 결과를 확인하고 그에 따라 잘못된 입력을 처리할 수 있습니다.

위 내용은 C에서 잘못된 데이터 유형 입력으로 인해 발생하는 무한 루프를 어떻게 방지할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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