【问题标题】:Reducing huge user input to limits? (C++)将大量用户输入减少到极限? (C++)
【发布时间】: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 &gt;= LLONG_MAX — 您真的确定要将 LLONG_MAX 从允许值范围中排除吗? :)

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


【解决方案1】:

你想输入一个字符串并在上面使用strtoll

【讨论】:

  • 这没有提供问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论。
  • @Achilles 问题是“我该如何解决这个问题?”答案概述了解决此问题的方法。如果您认为这样做不够详细或不清楚,请随时投反对票或举报。
  • 将输入法修改为cin &gt;&gt; unconverted_input; const char* converted_input = unconverted_input.c_str(); input_value = strtoll(converted_input, NULL, 10);,其中 unconverted_input 是一个 c++ 字符串,对我来说效果很好。
  • 转换后别忘了查看errno
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-24
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-22
相关资源
最近更新 更多