0

我在编程项目上遇到了一些麻烦。我想从 .txt 文档中获取信息,并将信息存储在类对象数组中。对于 .txt 文档的每一行,我想要创建一个新的类对象。

所以如果有

"10 Mark 9/24/1988 客户经理

9 珍妮 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);
   }
}

我应该创建一个调用函数来对信息进行排序还是有更简单的方法?我卡住了...对不起初学者的问题...

4

3 回答 3

2

您可以重载operator>>以使这更容易一些。这是运算符重载的实际目的。您提供自定义行为,并且在使用流时它是完全透明的。在你的类中声明一个friend-function

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

请参阅此处获取教程。

于 2013-04-13T07:44:04.720 回答
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++;
}
于 2013-04-13T07:41:28.757 回答
0

您没有uArray正确访问 的元素。由于它是一个数组(在您的示例中大小为 100),因此您需要指定要将数据加载到哪个数组元素,如

uArray[i].users.iD

解决问题的一种方法是为文件中的每条记录增加一个变量:

int index = 0;
while ( !myFile.eof() && index < 100 ) {
    myFile >> uArray[index].users.iD >> ...;
    index++;
}

顺便说一句,如果您为“100”值命名(作为 a#define或作为 a const int),并使用该值进行比较,您将获得加分index

于 2013-04-13T07:42:49.373 回答