2009-07-14 79 views
3

通過C++ Primer Plus進行工作,並試圖將數據cin轉換爲動態分配的結構數組。其中一個項目是一個char數組。我如何寫這些結構成員?發佈我錯誤的嘗試代碼,以便您可以看到我想要做的事情。訪問C++中的結構數組的成員

#include <iostream> 
using namespace std; 

struct contributions 
{ 
    char name[20]; 
    double dollars; 
}; 

int donors; 

int main() 
{ 
    cout << "How many contributors will there be?\n"; 
    cin >> donors; 
    contributions * ptr = new contributions[donors]; 
    for(int i = 0; i <= donors; i++) 
    { 
     cout << "Enter donor name #" << i+1 << ": \n"; 
     cin >> ptr->contributions[i].name; 
     cout << "Enter donation amount: \n"; 
     cin >> ptr->contributions[i].dollars; 
    } 

在此先感謝!

回答

2

嘗試使用std :: string而不是char [20]作爲名稱,並且示例應該可以正常工作。

struct contributions 
{ 
    std::string name; 
    double dollars; 
}; 

也接入更改爲

ptr[i].name 
+0

22 |錯誤:無效使用`struct contribution'| 我將行更改爲「字符串名稱」並收到該錯誤。 – scribbles 2009-07-14 15:20:08

3
cin >> ptr[i].name; 

ptr是變量的名稱,它是contributions*類型。它是一個contributions的數組,因此要訪問 th成員,請使用ptr[i]。然後通過ptr[i].name訪問該成員的name字段。此外,cin >> char[]可能不起作用(我不記得肯定),因爲char[]更多的是C-ISH的東西,而cin是C++。因此,您可能需要將name的類型更改爲std :: string。

順便說一句,約定是用單數名詞命名你的結構/類。因此contribution將是一個更正確的名字;每個實例代表單一貢獻

+0

我只是在你發佈它時寫這個... +1。我很困惑OP的代碼是如何編譯的。 – rmeador 2009-07-14 15:19:40

+0

那麼OP從未說過他的代碼究竟出了什麼問題;我的猜測是它實際上並沒有編譯。 – 2009-07-14 15:22:48

0

此外,使用一個std ::向量貢獻w2ill使代碼更簡單。因爲它是,你有一個內存泄漏。如果這是直接來自C++ Primer Plus,那麼我會認真地建議改爲一本教你現代,正確的C++的教科書,例如Koenig & Moo的Accelerated C++

0

cin >> ptr[i].name;(正確的形式)將停止在第一個空白字符處(如果在數組中的20個空格用完之前沒有這樣的字符出現,則會有緩衝區溢出)。改爲使用cin.getline(ptr[i].name, 20)