#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将值添加到特定值在数组的特定结构中。 请回答一个简单的答案;我仍然是编程新手。(我的尝试是粗体
答案 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向量,如果您提前预测输入的大小,则可以提高性能。