如何在运行时向结构数组添加值(在c ++中)

时间:2010-09-15 21:55:45

标签: c++ arrays

#include <iostream>
#include <string>
#include <cstring>

using namespace std;

int main (){
 int a,b;
 b = 0;
cout<<" this is a family profiling program to test my knowledge of structural arrays. ";
 cin>> a;
 struct p {
char name[20];
int age;
char hobby[40];
char favcolor[15];
};
p family[2];
**cin.getline(family.name[0]);**
cout<<"enter the name of family member"<<b+1;

我正在尝试使用此代码创建一个系列分析程序,我知道如何在编译时为数组或结构数组添加值,但不使用cin或cin.getline将值添加到特定值在数组的特定结构中。 请回答一个简单的答案;我仍然是编程新手。(我的尝试是粗体

3 个答案:

答案 0 :(得分:0)

如果您坚持使用数组,最简单的方法(将元素添加到固定大小的数组)将是将所有内容复制到新数组,包括新项目。

很多更好的方法是使用动态结构,例如链表。标准模板库和boost库有很多方法可以帮助你,但你也可以自己轻松实现一个简单的链表(或找到它的代码)。

正如Mike Chess所说,这可能是http://www.stackoverflow.com

最好的问题

(另外,为了使您的代码格式化,编辑帖子,选择代码部分,然后单击文本区域正上方的带有零和零图标的按钮)

答案 1 :(得分:0)

首先,如果使用std :: string而不是字符数组,您会发现编写可靠代码要容易得多。你几乎走在正确的轨道上:而不是family.name[0]尝试family[0].name,那么getline将使用std :: string,如下所示......

struct p
{
    std::string name;
    // other stuff...
};

if (getline(std::cin, family[0].name))
{
    // it worked!
    ...
}

答案 2 :(得分:0)

“高绩效”和旧学校的选择就是像这样使用realloc。

p * family = malloc(sizeof(p)*2);

family = realloc(family, sizeof(p)*13);

当然这不会调用构造函数,并且通常在C ++中不可接受。所以你最好的选择是。

#include <list>

using namespace std;

...

list<p> family;

p blah;

family.push_back(blah);

这是一个链表,因此它非常适合未知长度的数据集。相同的代码可用于STL向量,如果您提前预测输入的大小,则可以提高性能。