我想提示用户输入两倍,然后存储最小和最大值,然后打印文本。这是我到目前为止的代码:
#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";
}
}
所以我的代码工作正常并且可以完成我想做的事情,但是我对如何处理最大和最小值的两倍有疑问。 我必须给他们一个值,以使我的程序正常运行,但给他们一个值,却可以使用户受益。如果我没有将它们设置得过高或过低,用户可能会输入不会触发程序的值。 所以我将它们设置为任意的高/低数字。 但是我想知道是否有更好的解决方案。
答案 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