为什么这段代码不能正常工作? (C ++)

时间:2016-01-20 03:18:01

标签: c++

如果我输入此代码:

#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;
}

它给了我错误的价值观。

我做错了什么?任何帮助是极大的赞赏。 (我是一个菜鸟)。在这里添加一些文字,以便我可以发布这个问题.............................

1 个答案:

答案 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和输入值的最大值,因为它是唯一输入的值。