将巨大的用户输入减少到极限? (C ++)

时间:2014-04-19 03:45:53

标签: c++ terminal user-input integer-overflow numeric-limits

我的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,以及全局使用namespace std。

1 个答案:

答案 0 :(得分:-1)

您想输入字符串并在其上使用strtoll