2013-11-25 46 views
1
#include <iostream> 

using namespace std; 

int main() 
{ 
    double a[5], b[5], sum[5]; 
    for(int i = 0; i < 5; i++){ 
     cin >> a[i] >> b[i]; 
     sum[i] += a[i] + b[i]; 
    } 
    for(int i = 0; i < 5; i++) 
     cout << sum[i] << " "; 
    return 0; 
} 

我试图将总和[i] + b [i]加到总和[i]中,然后输出它。但由于某些原因,它似乎并不像预期的那样工作,其输出为任意数量的最后一个元素上一些奇怪的价值,这里有一个例子:作为一个数组的最后一个元素得到奇怪的结果

5.2 1.2 
5.3 2.1 
2.7 5.3 
2.7 5.3 
2.6 1.9 
6.4 7.4 8 8 7.5784e+268 

正如你所看到的,不计算最后一个元素正确。我尝试在C :: B中使用调试器,它说一切都很好。

Program exited normally. 
Debugger finished with status 0 
+2

你没有初始化sum数组的值 – smac89

+0

你没有扔掉换行符。你不需要吗? –

回答

3

的问题是,总和数组中的值不都开始初始化为0。所以你有一些垃圾值坐在数组的索引这就是为什么你的最后一个值是不正确的一个。

在主要做到这一点:

sum[5] = {0.0}; 

而且因为这有一个C++代码,为什么不使用std::vector?这是因为vector会将内容初始化为默认值。

std::vector<double> sum(5); //This will contain {0.0, 0.0, 0.0, 0.0, 0.0} 
+0

感谢您的支持,但为什么它不适用于最后一个元素,并且适用于其他元素? – user3002211

+2

@ user3002211它是未定义的行为使用一个未初始化的变量,所以任何事情都可能发生。 –

+0

@ user3002211:纯粹的机会。堆栈增长减少,以前只使用帧中的一个字节?可能是任何东西...... –

相关问题