2013-11-25 3 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 

Как вы можете видеть, последний элемент не рассчитывается правильно. Я попытался использовать Debugger в C :: B, и он говорит, что все в порядке.

Program exited normally. 
Debugger finished with status 0 
+2

Вы не инициализировали значения массива сумм – smac89

+0

Вы не выбрасывали символы новой строки. Вам не нужно? –

ответ

3

Проблема заключается в том, что значения в массиве суммы не все первоначально инициализируется в 0. Таким образом, у вас есть какой-то мусор значение, сидя в одном из индекса массива, который почему ваше последнее значение неверно.

В основном это сделать:

sum[5] = {0.0}; 

Кроме того, так как это имеет тег C++, почему бы не использовать std::vector? Это связано с тем, что вектор инициализирует содержимое значением по умолчанию.

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

Спасибо за это, но почему он не работает для последнего элемента, особенно, и он работает для остальных? – user3002211

+2

@ user3002211 Неопределенное поведение для использования неинтеллизированной переменной, чтобы все могло случиться. –

+0

@ пользователь3002211: Pure шанс. Стек стекает и только один байт в кадре был ранее использован? Может быть что угодно ... –

Смежные вопросы