编程:使用C ++的原理和实践第4章钻取步骤6:有关数字范围的一般问题

时间:2019-06-01 16:02:07

标签: c++

我想提示用户输入两倍,然后存储最小和最大值,然后打印文本。这是我到目前为止的代码:

#include <iostream>
#include <string>
#include <cmath>
#include <vector>

using namespace std;


int main()
{       
    double min = 1000000000; // Here is my issue !
    double max = -100000000; // Here is my issue !
    for (double input; cin >> input;)
    {
        if (input == '|')
            return 0;
        else if (input < min)
        {
            min = input;
            cout << "The smallest so far\n";
        }
        else if (input > max)
        {
            max = input;
            cout << "The largest so far\n";
        }
        else
            cout << "\n";
    }
}    

所以我的代码工作正常并且可以完成我想做的事情,但是我对如何处理最大和最小值的两倍有疑问。 我必须给他们一个值,以使我的程序正常运行,但给他们一个值,却可以使用户受益。如果我没有将它们设置得过高或过低,用户可能会输入不会触发程序的值。 所以我将它们设置为任意的高/低数字。 但是我想知道是否有更好的解决方案。

2 个答案:

答案 0 :(得分:5)

  

如果我没有将它们设置得过高或过低,用户可能会输入不会触发程序的值。

正确。

  

但是我想知道是否有更好的解决方案。

有!

1000000000可能确实不够。您可能对numeric limits感兴趣。您想要的是:

double min = std::numeric_limits<double>::max();
double max = std::numeric_limits<double>::lowest();

这会将两个值分别设置为最大和最小可表示的double

别忘了#include <limits>

答案 1 :(得分:0)

我来不及回答这个问题,但是我想提请您注意,在您的情况下,您必须使用lowest() min()

double min = std::numeric_limits<double>::max();
double max = std::numeric_limits<double>::lowest();  // <-- Attention, not min

使用min()代替lowest()是一个常见错误(是,名称具有误导性)

来自cppreference

  

lowest() [静态](C ++ 11)返回给定值的最低有限值   类型(公共静态成员函数)

     

min() [静态]返回给定类型的最小有限值   (公共静态成员函数)

std::cout << std::numeric_limits<double>::min();
std::cout << std::numeric_limits<double>::lowest();

打印:

2.22507e-308    <-- min    : smallest value
-1.79769e+308   <-- lowest : is what you need in your case