2013-06-04 224 views
0

這已經有一段時間了(去年的Java類)。自從我的學校沒有提供它以來,一直試圖自己學習C++。我寫了一個簡單的程序來測試我到目前爲止學到的東西 - 真正的語法 - 在我進入中間件之前。無論如何,我只想強調我從來沒有找到答案,我寧願你問我關於我的後勤問題,以便我可以重新思考問題,並可能自行完成。我認爲,因爲我可以在Java中成功編寫這個代碼,所有代碼在C++中都會很好,但是我遇到了可變的問題。我試圖調試和步入,但我仍然不明白爲什麼我的一些變量沒有得到我分配的值。如果你能指出我正確的方向,我會非常感激。C++邏輯問題

// This program will create any number of teams the user chooses, 
// give each a score and calculate the average of all the teams. 

#include <iostream> 
using namespace std; 

int main(){ 

    //number of teams 
    int teamCount; 
    //array to keep scores 
    int team[0]; 
    //total of scores 
    int total=0; 
    //average of all scores 
    int average=0; 

    cout<<"How many teams do you want to keep scores of?"<<endl; 

    cin>>teamCount; 

    //cout<<teamCount; 

    //ask the person for the score as many time 
    //as there are teams. 
    for(int i=0; i<teamCount; i++){ 
     cout<< "Give me the score of team "<< i+1<<":"<<endl; 
     cin>>team[i]; 

     total+=team[i]; 
    } 

    average = teamCount/total; 

    //output the list of the scores 
    for(int i=0; i<teamCount; i++){ 
     cout<<"Team "<<i+1<<" score is:"<<team[0]<<endl; 
    } 

    cout<<"and the average of all scores is "<<average<<endl; 

    return (0); 

} 
+0

請列舉這導致問題的變量,你期待什麼樣的價值他們有什麼價值觀,他們實際上擁有。 – Philipp

+0

嘗試閱讀std :: vector或http://isocpp.org/tour。 C++不是Java,因爲您從實驗中看到 –

+0

make int team [0]; - > int團隊[100];一個用戶只能輸入一個小於100的數字,平均值應該是總數/隊伍數量。然後你在得分輸出中有硬編碼隊伍[0] – sethi

回答

2

在線路

int team[0]; 

要創建與0的條目的陣列。 C++中的數組不能增加或縮小。爲了解決這個問題,無論是分配你知道後動態需要多大的空間陣列:

int * team = new int[teamCount]; 

(不要忘記調用delete[] team;當你不需要它了,或者內存空間還沒有回收)

或者更好地使用面向對象的方式,並使用類爲Java類ArrayList的C++等價類的std::vector

你的下一個錯誤是在這裏:

//output the list of the scores 
for(int i=0; i<teamCount; i++){ 
    cout<<"Team "<<i+1<<" score is:"<<team[0]<<endl; 
} 

您在每次循環迭代過程中一次又一次地輸出第一隊的價值。

順便說一句:這兩種錯誤是剛剛在Java作爲錯誤:)

+0

這是一種戰術性的戰術還是在我的解釋中出現了問題? – Philipp

+0

(我不知道什麼是downvote。)你的解釋很棒。每個人都提醒說矢量不是動態的。這似乎是我的問題的開始。而且我昨天才知道「垃圾」,所以謝謝你提醒我,所以我可以在我的代碼中實現它! – Addy75

+0

downvote在'vector'之前提到'new []'(或者更確切地說,提到'new []')。 – Griwes

3

您的團隊陣列沒有與其關聯的存儲空間。在C++中數組不是動態的,請嘗試使用矢量來代替,並調整其大小,當你閱讀teamCount

+2

嗯,'int team [0];'實際上是零'int's long。 'team'是一個獨特的,非'NULL'指針,但取消引用它是UB。 –

+0

團隊[0]不是一個整數。 –

+0

正確。將編輯 –

1

試試這個:

average = total/teamCount; //Lets calculate the average correctly. Note: Integer division 

//output the list of the scores 
for(int i=0; i<teamCount; i++){ 
    cout<<"Team "<<i+1<<" score is:"<<team[i]<<endl; //We want each value, not only team[0] 
} 
6

你的陣列

int team[0]; 

將不是在C工作++。順便說一句,你不能分配0大小的數組這樣
嘗試C++容器代替

std::vector<int> team; 
+0

是的,它會:http://stackoverflow.com/questions/1087042/c-new-int0-will-it-allocate-memory –

+0

@AndrewW:不,它不會,你的鏈接不提供證據它確實。 –

+0

@AndrewW不,它不是,至少不是問題中所顯示的方式。 – juanchopanza