문자를 누를 때 왜 무한 루프가 발생합니까? 오류 검사시 코드가 무한 반복되는 것을 방지하려면 어떻게합니까? 표준 : CIN 안전 타입이기 때문에문자를 누를 때 왜 무한 루프가 발생합니까? 오류 검사를 위해 어떻게 변경합니까?
#include <iostream>
using namespace std;
int main()
{
int number;
cout << "Enter a number in the range 1-100: ";
cin >> number;
while (number > 1 || number < 100)
{
cout << "ERROR: Enter a value in the range 1-100: ";
cin >> number;
}
return 0;
}
나는 좋은 중복 (꽤 stackoverflow.com에 여기에 몇 가지, 그리고 더 넓은 인터넷에서 알아보다가)를 찾기 위해 게으른 해요,하지만 문제의 요점은 그 때 입력 연산자 입력을 숫자로 분석 할 수 없으며 입력을 버퍼에 남겨 둡니다. 아무 것도 제거하지 않습니다. 따라서 매번 반복문에서 동일한 입력을 반복해서 읽습니다. [ignore 함수에 대해] (http://en.cppreference.com/w/cpp/io/basic_istream/ignore) 도움을 받으십시오. –
while 구문의 조건이 어떤 것인지 생각해보십시오. – 1201ProgramAlarm
이전의 컴파일러 나 건물을 pre-C++ 11 모드로 사용하고 있다면, 불법적 인 입력에서'number'가 수정되지 않기 때문에 * 정의되지 않은 동작 *이 생깁니다. 그리고 초기화되지 않기 때문에 * 불확정 * 값을 가지게되고 루프의 비교가 UB를 줄 것입니다. –