私の C++ プログラムには、端末から 1 つの数値を収集する関数があります。
ユーザーからの数値入力を受け入れ、signed 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 をグローバルに使用しています。