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

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

DDD
DDD원래의
2024-12-04 02:37:11349검색

Why Does Letter Input Cause an Infinite Loop in My C   Program?

문자를 정수 입력으로 허용하는 C 프로그램의 무한 루프 문제

이 문제는 프로그램에서 정수 입력을 기대하지만 사용자가 입력할 때 발생합니다. 대신 편지. 입력 스트림의 예기치 않은 문자로 인해 프로그램이 무한 루프에 들어갑니다. 이로 인해 "입력한 숫자는 음수입니다. 계속하려면 양수를 입력하십시오."라는 메시지가 계속 표시됩니다. 사용자에게 유효한 숫자를 입력할 기회를 제공하지 않습니다.

설명

이 문제의 근본 원인은 C 입력 스트림의 동작에 있습니다. 사용자가 숫자가 아닌 문자를 입력하면 입력 스트림의 "failbit" 플래그가 설정됩니다. 그러나 스트림이 지워지지 않아 프로그램이 동일한 루프 반복에 머물러 잘못된 문자를 반복해서 읽으려고 시도합니다.

해결 방법

이 문제를 해결하려면 , 적절한 입력 유효성 검사 및 오류 처리를 구현해야 합니다. 다음은 이 문제를 해결하는 방법의 예입니다.

#include <iostream>
#include <limits>

// ... (remaining code)

cout << "\nPlease enter a positive number and press Enter: \n";
do {
    while (!(cin >> num1)) {
        cout << "Incorrect input. Please try again.\n";
        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 루프는 do-while 루프 내에 캡슐화되어 최소한 초기 입력이 유효하지 않은 경우에도 한 번 실행됩니다.
  • 내부 루프 내에서는 cin.fail()을 사용하여 적절한 입력 유효성 검사가 구현됩니다.
  • 잘못된 입력이 감지되면 오류 메시지가 표시되고 cin 버퍼가 지워지고 무시되어 후속 입력 시도에 영향을 주지 않습니다.
  • 그런 다음 사용자에게 다시 요청하라는 메시지가 표시됩니다. -유효한 정수를 입력하세요.
  • 이 과정은 사용자가 양의 정수를 입력할 때까지 계속됩니다.

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

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