gpt4 book ai didi

c++ - 从文件读取到 C++ 结构中的结构数组

转载 作者:搜寻专家 更新时间:2023-10-31 02:00:59 24 4
gpt4 key购买 nike

我以前问过这个问题here并关闭了一个类似的问题。

所以根据另一个用户的评论,我重新设计了我的问题:

在第一篇文章中,我试图将文件中的数据读取到具有结构的数组中。通过使用 indata << p[i] 和 is >> p.fId,我能够从数据中读取值文件到 PersonId。

现在我想试试这个:

struct PersonId
{
int fId;
};

struct PersonData
{
public:
typedef PersonData* Ptr;
PersonData();
PersonId fId;
istream& read(std::istream&);
};

istream& PersonData::read(std::istream& is)
{
is >> fId;
return is;
}

istream& operator >> (istream& is, PersonData &p)
{
// is >> p.fId;
return p.read(is);
}

int main ()
{
ifstream indata; // indata is like cin
int i;
indata.open("persons.txt", ios::in); // opens the file

if(!indata)
{ // file couldn't be opened
cout << "Error: file could not be opened" << endl;
exit(1);
}

int n = 5;

PersonData* p;
p = (PersonData*) malloc (n * sizeof(PersonData));


while ( !indata.eof() )
{
indata >> p[i];
i++;
}

for(i = 0; i < n; ++i)
{
cout << "PersonData [" << i << "] is " << p[i] << endl;
}
return 0;
}

我想使用成员函数“read”将值实际读取到由 PersonData 定义的结构中。我的问题:

  1. 如何从文件中读取数据到 PersonData 结构中存储的 PersonId 结构?

  2. 在读取 PersonData[i] 时,我应该看到它有一个具有更新值的结构 PersonId。

我希望我的问题现在清楚了吗?

最佳答案

你有:

istream& operator >> (istream& is, PersonId &p)
{
is >> p.fId;
return is;
}

缺少,在 struct PersonId 之后;

你需要它来使 read() 中的 is >> fId 正常工作。

此外,修复 cout 以使用 p[i].fId.fId。

效果很好!

在风格上,现在你在 C++ 中,不要使用 malloc,使用 new,更好的是,使用 std::vector<>,它将为你处理大小调整。

关于c++ - 从文件读取到 C++ 结构中的结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1233501/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com