cin 및 숫자 유형 오류가 있는 무한 루프 이해
일부 프로그래밍 시나리오에서는 cin을 사용하여 문자열을 입력할 때 무한 루프 동작이 발생할 수 있습니다. 숫자 값을 기대하면서. 이 문서에서는 이 문제를 자세히 살펴보고 가능한 해결 방법을 제공합니다.
무한 루프에 대한 설명
귀하가 제공한 루프:
while (1) { cin >> ul_x1 >> ul_x2; cout << "ul_x1 is " << ul_x1 << endl << "ul_x2 is " << ul_x2 << endl; }
끝없이 숫자 대신 문자가 입력되면 반복합니다. 이는 cin이 숫자가 아닌 입력을 만나면 실패 상태가 되고 추가 입력을 요청하는 메시지를 표시하지 않기 때문입니다. 결과적으로 사용자 상호 작용을 허용하지 않고 루프가 계속 중단됩니다.
숫자가 아닌 입력 감지
이 문제를 방지하려면 숫자가 아닌 입력을 감지하는 것이 중요합니다. 한 가지 간단한 접근 방식은 cin이 실패 상태인지 확인하는 것입니다. 예는 다음과 같습니다.
if (cin.fail()) { cout << "ERROR -- You did not enter an integer"; // Clear the fail state and discard bad input cin.clear(); cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); }
이 코드는 실패 상태를 확인하고 오류 메시지를 표시하며 실패 상태를 지웁니다. cin.ignore() 호출은 오류를 발생시켰을 수 있는 입력 버퍼에 남아 있는 모든 문자를 삭제합니다.
추가 고려 사항
더 복잡한 유효성 검사 요구 사항의 경우 먼저 입력을 문자열로 읽은 다음 추가 검사를 수행하여 예상 형식을 충족하는지 확인하는 것이 도움이 될 수 있습니다. 이를 통해 입력 유효성 검사를 처리할 때 더 큰 유연성과 사용자 정의 기능을 제공할 수 있습니다.
위 내용은 숫자가 아닌 값을 입력할 때 'cin'이 무한 루프를 일으키는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!