>백엔드 개발 >C++ >'cin'이 유형 불일치로 인해 무한 루프를 발생시키는 이유는 무엇입니까?

'cin'이 유형 불일치로 인해 무한 루프를 발생시키는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-26 09:25:09387검색

Why Does `cin` Cause Infinite Loops with Type Mismatches?

유형이 일치하지 않을 때 cin을 사용하는 무한 루프 이해

cin 함수를 사용하여 입력을 읽을 때 예상되는 입력이 있으면 무한 루프가 발생할 수 있습니다. 숫자이지만 대신 문자가 입력됩니다. 이는 cin이 숫자가 아닌 입력을 만나 실패 상태에 들어가 추가 입력을 요구하지 않기 때문에 발생합니다.

무한 루프의 원인

제공된 코드:

unsigned long ul_x1, ul_x2;

while (1)
{
  cin >> ul_x1 >> ul_x2;
  cout << "ux_x1 is " << ul_x1 << endl << "ul_x2 is " << ul_x2 << endl;
}

잘못된 입력이 제공되면 cin이 실패하고 해당 상태를 유지합니다. 결과적으로 루프는 cin이 입력을 다시 읽는 블록에 들어가지 않아 무한 루프가 발생합니다.

무한 루프 방지

이 문제를 방지하려면 다음을 검증할 수 있습니다. cin의 실패 상태를 사용하여 입력:

if (cin.fail())
{
  cout << "ERROR -- You did not enter an integer";

  // Clear fail state and discard bad input
  cin.clear();
  cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}

대안: 문자열 기반 유효성 검사

보다 복잡한 유효성 검사의 경우 특정 문자열 기반 검사를 수행하기 전에 입력을 문자열로 읽어 예상 형식을 충족하는지 확인하는 것이 도움이 될 수 있습니다.

위 내용은 'cin'이 유형 불일치로 인해 무한 루프를 발생시키는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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