터미널에서 하나의 번호를 수집하는 C++ 프로그램의 함수가 있습니다.거대한 사용자 입력을 제한으로 줄이기? (C++)
사용자가 입력 한 숫자를 수락하고, 부호있는 long long int 범위를 벗어나는 숫자를 정확한 한도로 줄이거 나, 사용자에게 정확하게 알려주고, 성공적으로 반환하기를 원합니다.
모든 숫자가 아닌 입력은 완전히 버리고 사용자에게 무한정 다시 프롬프트해야합니다.
지나치게 큰 입력이 자동으로 부호있는 제한으로 축소 될 것이라고 생각했지만 대신이 함수는 유효하지 않은 것으로 처리하고 비 번호 다시 프롬프트를 제공합니다. 이 문제를 어떻게 해결할 수 있습니까?
void get_input(long long int& input_value)
{
while(0==0) //infinite loop
{
cout << "Input whole number: ";
if(cin >> input_value)
{
cout << endl;
if (input_value >= LLONG_MAX)
{
cout << "Size limit exceeded. " << LLONG_MAX << " will be used instead.\n\n";
}
else if (input_value <= LLONG_MIN)
{
cout << "Size limit exceeded. " << LLONG_MIN << " will be used instead.\n\n";
}
cin.clear();
return;
}
else
{
cout << "Please input a numeral.\n\n"; //trash invalid input
string garbage;
cin.clear();
getline(cin,garbage);
}
}
}
iostream, string 및 climits가 포함되어 있으며 전역 적으로 네임 스페이스 std를 사용하고 있습니다.
[C/C++에서 정수 오버플로를 감지하는 가장 좋은 방법] 중복 됨 (http://stackoverflow.com/questions/199333/best-way-to-detect-integer-overflow-in-cc) – MrDuk
@MrDuk I 이 다른 게시물에서 내 문제를 해결하는 방법을 이해하지 마십시오. – Makst
2 차 답을보세요. – MrDuk