使用C ++访问结构数组的成员

时间:2009-07-14 15:13:40

标签: c++

使用C ++ Primer Plus并尝​​试将数据转换为动态分配的结构数组。其中一个项目是char数组。我如何写这些结构成员?发布我错误尝试的代码,以便您可以看到我正在尝试做的事情。

    #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;
    }

提前致谢!

4 个答案:

答案 0 :(得分:3)

cin >> ptr[i].name;

ptr是变量的名称,类型为contributions*。它是contributions的数组,因此要访问 i 成员,请使用ptr[i]。然后通过name访问该成员的ptr[i].name字段。此外,cin >> char[]可能不起作用(我不记得肯定),因为char[]更像是一个C-ish的东西,而cin是C ++。因此,您可能需要将name的类型更改为std :: string。

顺便说一句,惯例是用单数名词命名你的结构/类。因此contribution将是一个更正确的名称;每个实例代表单一贡献

答案 1 :(得分:2)

尝试使用std :: string而不是char [20]作为名称,样本应该可以正常工作。

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

也会更改对

的访问权限
ptr[i].name

答案 2 :(得分:0)

此外,使用std :: vector of w2ill会使代码更加简单。事实上,你有内存泄漏。如果这是直接来自C ++ Primer Plus,我会认真地建议改为教你现代正确的C ++的教科书,例如Koenig&amp;撰写的Accelerated C++。 MOO。

答案 3 :(得分:0)

cin >> ptr[i].name;(正确的形式)将停留在第一个空格字符处(如果在数组中的20个空格用尽之前没有这样的字符,则存在缓冲区溢出的风险)。请改用cin.getline(ptr[i].name, 20)