2014-12-13 64 views
0

我正在寫一個函數,用用戶輸入填充三個數組並計算它們的平均值。但我得到一個奇怪的錯誤。奇怪的錯誤 - 打印出數組的內容會改變結果,即使我從未改變結果

這太奇怪了。當我註釋掉的代碼:

for (int i = 0; i < 5; i++) 
    cout << Steve[i] << ","; 
cout << endl; 

#include <iostream> 

using namespace std; 
void fill_up(int a[], int size); 

void fill_up(int a[], int size) 
{ 
    cout << "Enter " << size << " numbers:\n"; 
    for (int i = 0; i < size; i++) 
     cin >> a[i]; 
    size--; 
    cout << "The last array index used is " << size << endl; 
} 
int main() 
{ 
    int Steve[5]; 
    int George[5]; 
    int Mary[5]; 
    cout << "~ Fill up the Steve array ~" << endl; 
    fill_up(Steve, 5); 
    cout << "~ Fill up the George array ~" << endl; 
    fill_up(George, 5); 
    cout << "~ Fill up the Mary array ~" << endl; 
    fill_up(Mary, 5); 

    /* 
    for (int i = 0; i < 5; i++) 
     cout << Steve[i] << ","; 
    cout << endl; 
    */ 

    int SteveSum, GeorgeSum, MarySum = 0; 
    double SteveAvg, GeorgeAvg, MaryAvg; 
    for(int i = 0; i < 5; i++) 
    { 
     SteveSum += Steve[i]; 
     GeorgeSum += George[i]; 
     MarySum += Mary[i]; 
    } 
    SteveAvg = ((double) SteveSum)/5; 
    GeorgeAvg = ((double) GeorgeSum)/5; 
    MaryAvg = ((double) MarySum)/5; 

    cout << "Steve's average is " << SteveAvg << endl; 
    cout << "George's average is " << GeorgeAvg << endl; 
    cout << "Mary's average is " << MaryAvg << endl; 
} 

這裏是命令行中運行代碼的兩張截圖。 ss1 ss2

正如你可以看到,當我註釋掉打印陣列片斷,史蒂夫的平均出來,以一個奇怪的大量,但是當我取消註釋代碼片段,它工作正常。這是怎麼回事?

回答

8

錯誤:

int SteveSum, GeorgeSum, MarySum = 0; 

右:

int SteveSum = 0, GeorgeSum = 0, MarySum = 0; 
+4

這就是爲什麼在同一行聲明多個變量是一個壞主意;) – Borgleader 2014-12-13 17:40:52

+0

@deviantfan當然他們做,還有什麼是你實際上期待?問題是,如果問題在話題上。 – 2014-12-13 17:44:15

+0

對不起,刪除它(「看到最簡單的問題得到msot upvotes總是很有趣)」。我並沒有真正期待別的,但那並不能使整個事情變得更好。 – deviantfan 2014-12-13 17:48:00