为什么“double”和“int”在我的代码中提出了不同的解决方案?

时间:2017-05-05 14:50:47

标签: c++ int double codeblocks difference

我正在学习C ++,而且我不太了解浮动或双重。我理解int,int是整数的缩写,你为它分配一个字符来存储一个值。但你也可以使用float,并以同样的方式加倍。我正在使用code :: blocks,这是我从在线教程中编写的代码:

#include <iostream>
using namespace std;

int main()
{
double a,z;
cin >> a;

while(true)
{
    if (a == -1)
        break;
    z += a;
    cin >> a;
}
cout << "the result is: " << z << endl;
return 0;
}

当我编译它时,它将显示一个空提示符。您可以输入多个数字,数字本身可以是代码中可接受的任何大小。您键入所需的任何数字,然后按许多次按Enter键。然后你可以输入“-1”,代码将显示你输入的所有数字的总和。

我不知道是否有必要解释它,但我是新的堆栈溢出,所以原谅我的无知。我的问题是:当我更换时,“双a,z;” to,“int a,z;”为什么我会得到不同的结果?我测试了这个,你也可以。使用代码中的常规“double”,我可以输入2,2和-1,然后显示4.然而,当我的代码中有“int”时,我尝试再次将2加在一起,它显示4309762.为什么会这样?我想知道double和int之间的区别,以及为什么这两个答案是如此不同。感谢。

1 个答案:

答案 0 :(得分:3)

发生这种情况的原因是因为您有未定义的行为。这意味着您的其中一个变量z具有不确定的值,因为默认情况下它不是intdouble设置为0。通过向其添加a,您将添加与z中存储的不确定值相关的任何值。因此,您将获得未定义的行为,从而产生随机值。因此,要修复代码,您可以执行以下操作:

#include <iostream>
using namespace std;

int main()
{
    int a,z = 0; //<--
    cin >> a;

    while(true)
    {
        if (a == -1)
            break;
        z += a;
        cin >> a;
    }
    cout << "the result is: " << z << endl;
    return 0;
}

您不必为a赋值的原因是因为您在行之后立即接受输入,假设输入成功。另外,作为建议,您可以将while循环更改为以下内容,以避免使用额外代码和break

while(a != -1)
{
    z += a;
    cin >> a;
}