如果我输入此代码:
#include<iostream>
using namespace std;
int main ()
{
int input, qty, min, max;
bool validity = 1;
cout << "How many integers would you like to enter? \n";
cin >> qty;
if (qty <= 0)
cout << "Please enter a positive number\n";
else
{
cout << "Please enter " << qty << " integers:" << endl;
for (int x=0; x < qty; x++)
{
cin >> input;
if (input > max)
max = input;
if (input < min)
min = input;
}
}
if (validity)
{
cout << "Minimum: " << min << endl;
cout << "Maximum: " << max << endl;
}
return 0;
}
它按预期工作。
但如果我有这个:
#include<iostream>
using namespace std;
int main ()
{
int input, qty, min, max;
bool validity = 1;
cout << "How many integers would you like to enter? \n";
cin >> qty;
if (qty <= 0)
cout << "Please enter a positive number\n";
else
{
cout << "Please enter " << qty << " integers:" << endl;
for (int x=0; x < qty; x++)
{
cin >> input;
if (input > max)
max = input;
if (input < min)
min = input;
}
}
if (max > 2147483646)
{
cout << "Please enter a valid value for integers." << endl;
validity = 0;
}
if (min < -2147483647)
{
cout << "Please enter a valid value for integers." << endl;
validity = 0;
}
if (validity)
{
cout << "Minimum: " << min << endl;
cout << "Maximum: " << max << endl;
}
return 0;
}
它给了我错误的价值观。
我做错了什么?任何帮助是极大的赞赏。 (我是一个菜鸟)。在这里添加一些文字,以便我可以发布这个问题.............................
答案 0 :(得分:2)
max和min 未初始化。在C ++中,这意味着值可以是任何值,除非在Java中基元被自动初始化为0。
一种解决方法是设置第一个标志,并将输入的第一个值设置为max和min。
bool first = true;
for (int x=0; x < qty; x++)
{
cin >> input;
if( first )
{
max = input;
min = input;
first = false;
}
if (input > max)
max = input;
if (input < min)
min = input;
}
以下是未初始化的含义。启动时,最小值和最大值可以是任何值。什么都没有。通过在循环之前打印出min和max的值来尝试它。每次运行程序时都应该(可能)不同。基本上,该值取决于上次使用时该内存位置中的数据。
因此if( input > max)
正在检查输入是否大于-2亿到20亿之间的随机数。 (没有用)。我放在那里的first
标志在for循环的第一次迭代中初始化min
/ max
,或者是用户输入的第一个值,保证是min和输入值的最大值,因为它是唯一输入的值。