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

Reducing huge user input to limits? (C++)

本文关键字:极限 C++ 巨大 用户 输入      更新时间:2023-10-16

我的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.nn";
            }
            else if (input_value <= LLONG_MIN)
            {
                cout << "Size limit exceeded. " << LLONG_MIN << " will be used instead.nn";
            }
            cin.clear();
            return;
        }
        else
        {
            cout << "Please input a numeral.nn"; //trash invalid input
            string garbage;
            cin.clear();
            getline(cin,garbage);
        }
    }
}

我包括iostream、string和climits,并全局使用命名空间std.

您想要输入一个字符串并对其使用strtoll