Сокращение огромного пользовательского ввода до пределов? (C++)

У меня есть функция в моей программе C++, которая собирает одно число с терминала.

Я хочу, чтобы он принимал любые числа, введенные пользователем, сокращал числа за пределами диапазона длинных длинных чисел со знаком до точного предела, правильно информировал пользователя о любом сокращении и возвращался успешно.

Все нечисловые вводы должны быть полностью выброшены и повторять запрос пользователя бесконечно.

Я думал, что чрезмерно огромные входные данные будут автоматически уменьшены до подписанного предела, но вместо этого эта функция обрабатывает их как недействительные и выдает мне повторное приглашение без номера. Как я могу это исправить?

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.

1 ответ

Решение

Вы хотите ввести строку и использовать strtoll в теме.

Другие вопросы по тегам