我正在学习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之间的区别,以及为什么这两个答案是如此不同。感谢。
答案 0 :(得分:3)
发生这种情况的原因是因为您有未定义的行为。这意味着您的其中一个变量z
具有不确定的值,因为默认情况下它不是int
或double
设置为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;
}