我在编程项目上遇到了一些麻烦。我想从.txt文档中获取信息,并将信息存储在类对象的数组中。对于.txt文档的每一行,我想要创建一个新的类对象。
所以,如果有
“10 Mark 9/24/1988客户经理
9 Jenny 8/6/1983航运助理“
在.txt中,第一行将存储在uArray [0]的第一个对象的变量中,第二行将存储在uArray [1]的变量中。
我创建了一个包含五个变量的“用户”类。
int iD;
string name, birth, sSN, dept, position;
这就是我所拥有的,我知道这是方式,但我无法做到正确..
{
ifstream myFile;
users uArray[100];
myFile.open("users.txt")
while(!myFile.eof())
{
myFile >> uArray.users.iD >> uArray.users.name >> uArray.users.sSN ...(ect);
}
}
我应该创建一个可以对信息进行排序的函数还是更简单的方法?我被困了......抱歉初学者的问题......
答案 0 :(得分:2)
您可以重载operator>>
以使其更容易一些。这是运算符重载背后的实际目的。您提供自定义行为,使用流时它完全透明。在类中声明friend
- 函数
friend std::ifstream& operator>>(std::ifstream&, users& user);
并实施它
std::ifstream& operator>>(std::ifstream& stream, users& user){
stream >> user.iD >> user.name >> user.sSN ...(ect)
return stream;
}
然后您可以使用for循环并按上述方式执行操作。但是必须使用数组索引来处理数组中的单个元素
int i = 0;
while(!myFile.eof())
{
myFile >> uArray[i].users.iD >> uArray[i].users.name >>
uArray[i].users.sSN ...(ect);
i++;
}
有关教程,请参阅here。
答案 1 :(得分:0)
您需要更类似于此的内容,您要将其编入索引:
ifstream myFile;
users uArray[100];
myFile.open("users.txt")
i=0;
while(!myFile.eof())
{
myFile >> uArray[i].iD >> uArray[i].name >> uArray[i].sSN ...(ect);
i++;
}
答案 2 :(得分:0)
您没有正确访问uArray
的元素。由于它是一个数组(在您的示例中大小为100),您需要指定要将数据加载到哪个数组元素,如
uArray[i].users.iD
问题的一个解决方案是为文件中的每个记录增加一个变量:
int index = 0;
while ( !myFile.eof() && index < 100 ) {
myFile >> uArray[index].users.iD >> ...;
index++;
}
顺便说一句,如果你给“100”值一个名字(#define
或const int
),你会得到额外的积分,并使用该值来比较{{1}反对。