2016-08-12 68 views
0

我希望代碼用循環總結所有三個數字,但函數只需將總量與第一個值總和三次,請幫助。函數總和第一個值3次而不是其他2個值

#include <iostream> 
using namespace std; 
class TEST 
{ 
    int num; 
public: 
    void input() 
    { 
     cin>>num; 
    } 
    int getAmount() 
    { 
     return num; 
    } 
}; 
float getTotalAmount(TEST *obj) 
{ 
    static float totalamount=0; 
    totalamount = totalamount + obj->getAmount(); 
    return totalamount; 
} 
int main() 
{ 
    TEST obj[3]; 

    for(int i=0;i<3;i++) 
    { 
    cout<<"Enter Number["<<i+1<<"]:"; 
    obj[i].input(); 
    cout<<"Current total= "<<getTotalAmount(obj)<<endl; 
    } 
} 
+0

能否請您以書面形式問題更加清晰。這很難解釋。 – AmanSinghal

+1

也許你應該把它改成'''cout <<「當前總數=」<< getTotalAmount(&obj [i])<< endl;''' – 2016-08-12 09:25:37

回答

1

當你有一個數組,像

TEST obj[3]; 

使用就像obj陣列名稱使其衰減到一個指向它的第一元件。

因此,在循環中,您總是調用getTotalAmount,同時指向同一對象(obj[0])。

如果要調用不同對象的函數,請使用&obj[i]obj + i

+0

我想我現在明白了.. –

+0

謝謝你的解決方案說明! –

1

getTotalAmount(obj),你每次都傳遞第一個元素的地址。將其更改爲:

cout<<"Current total= "<<getTotalAmount(&obj[i])<<endl; 
-2

的問題是在main功能您for loop。取而代之的

for(int i=0;i<3;i++) 
{ 
cout<<"Enter Number["<<i+1<<"]:"; 
obj[i].input(); 
cout<<"Current total= "<<getTotalAmount(obj)<<endl; 
} 

您應該使用

for(int i=0;i<=3;i++) 
{ 
cout<<"Enter Number["<<i+1<<"]:"; 
obj[i].input(); 
cout<<"Current total= "<<getTotalAmount(obj)<<endl; 
} 

for(int i=0;i<3;i++) 
{ 
cout<<"Enter Number["<<i<<"]:"; 
obj[i].input(); 
cout<<"Current total= "<<getTotalAmount(obj)<<endl; 
} 
+1

中間的代碼片段將超出數組的界限。最後一個片段與第一個片段沒有什麼不同,只是打印另一個片段。既不能解決問題,甚至還會引入其他問題。 –

+0

在發佈您認爲是解決方案的內容時,您應該解釋爲什麼您認爲它是。 –

1

你行更改

cout<<"Current total= "<<getTotalAmount(obj)<<endl; 

cout<<"Current total= "<<getTotalAmount(&obj[i])<<endl; 

並且您將傳遞指向每個元素的指針,而不僅僅指向第一個元素。

1
cout<<"Current total= "<<getTotalAmount(obj)<<endl; 
在此聲明每次要發送OBJ,其evaluted作爲

OBJ + 0 - > & OBJ [0],這是類型TEST的第一個對象。

這就是3次取第一個obj num值的原因。

你可以糾正它作爲

cout<<"Current total= "<<getTotalAmount(&obj[i])<<endl; 

cout<<"Current total= "<<getTotalAmount(obj+i)<<endl; 
相關問題