>백엔드 개발 >C++ >C 숫자 입력 프로그램에서 문자로 인해 무한 루프가 발생하는 이유는 무엇입니까?

C 숫자 입력 프로그램에서 문자로 인해 무한 루프가 발생하는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-02 21:20:11438검색

Why Do Letters Cause Infinite Loops in C   Number Input Programs?

숫자 대신 문자 입력 시 무한 루프 이해

정수 입력을 요구하는 프로그램을 실행하면 무한 루프가 발생하는 경우가 많습니다. 사용자가 숫자 대신 문자를 입력한 경우 이 문제는 C에서 입력 처리가 작동하는 방식으로 인해 발생합니다.

근본 원인:

C에서는 cin 함수를 사용하여 입력을 읽습니다. 그러나 숫자가 아닌 문자를 입력하면 cin은 유효한 정수를 추출하지 못합니다. 결과적으로 cin 스트림 객체 내에 Failbit 플래그가 설정되어 오류를 나타냅니다.

무한 루프 수정:

무한 루프를 해결하려면 다음이 필요합니다. 잘못된 입력 시나리오를 감지하고 처리합니다. 다음은 이 문제를 해결하는 수정된 코드 부분입니다.

#include <limits> // Includes numeric_limits for input validation

// (...) Existing code

// user enters a number
cout << "\nPlease enter a positive number and press Enter: \n";
do {
    while (!(cin >> num1)) {
        cout << "Incorrect input. Please try again.\n";

        // Clear the failbit and ignore the remaining input
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
    }

    if (num1 < 0)
        cout << "The number you entered is negative. Please enter a positive number to continue.\n";
} while (num1 < 0);

설명:

  • while (!(cin >> num1)) cin이 정수를 성공적으로 읽었는지 확인합니다. 그렇지 않은 경우 내부 do-while 루프에 들어가 오류를 처리합니다.
  • cin.clear(); cin이 입력을 다시 읽을 수 있도록 Failbit 플래그를 재설정합니다.
  • cin.ignore(numeric_limits::max(), 'n'); 개행 문자를 만날 때까지 모든 문자를 읽고 버립니다. 이렇게 하면 개행 문자 이전에 입력된 잘못된 입력이 삭제됩니다.
  • 이러한 수정을 통해 프로그램은 이제 유효한 양의 정수가 입력된 경우에만 루프를 실행하여 잘못된 입력으로 인한 무한 루프를 방지합니다.

    위 내용은 C 숫자 입력 프로그램에서 문자로 인해 무한 루프가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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