【发布时间】:2014-06-03 15:19:14
【问题描述】:
我的 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。
【问题讨论】:
-
@MrDuk 我不明白如何从其他帖子中解决我的问题。
-
看看第二个答案 - 我打赌它会让你开始
-
input_value >= LLONG_MAX— 您真的确定要将 LLONG_MAX 从允许值范围中排除吗? :)
标签: c++ terminal user-input integer-overflow numeric-limits