0

我需要做的是将文本文件读入数组。每行有四个部分;名字、ID、身高和体重。文本文件有13行,所以我需要做13次。我将编写一个循环以使其工作(并将在一个函数中,我将解析数组。)我知道如何使用基本数组来完成它,但我们应该为此使用结构。我环顾四周试图找出如何做到这一点,但没有什么对我真正有用。这是我到目前为止的代码。

#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;
struct person
{
string firstname;
int id;
double height;
double weight;
};
int main()
{
person array[13];
person *ptr;
ptr = &array[0];
ifstream inData;
inData.open("peeps.txt");
while(!inData.eof())
{
    for(ptr = &array[0]; ptr < &array[13];ptr++)
    {
        inData >> person[ptr].firstname >> person[ptr].id
        >> person[ptr].height >> person[ptr].weight;


    }
}
}
4

1 回答 1

1

你这样做的方式相当混乱,但它几乎是正确的。在for循环内部,您正在尝试 index person,这是一个类。这没有多大意义。相反,您在每次迭代时ptr都指向person数组中的每个对象,因此您可以取消引用它并分配给它的成员:

inData >> ptr->firstname >> ptr->id
>> ptr->height >> ptr->weight;

然而,更糟糕的是,for当你这样做时,你在循环中有未定义的行为array[13]。索引 13 处没有元素,因此您不能尝试像这样访问它。您可以将条件更改为ptr <= &array[12],但这仍然非常混乱。

不过要清楚,您绝对没有您所说的指针数组。相反,您有一个persons 数组。

ptr = &array[0];

这将获取person数组中第一个的地址并将其分配给指针。通过利用数组到指针的转换,您可以更轻松地做到这一点:

ptr = array;

此外,eof()由于您的while标准通常不是一个好主意。它不能很好地指示下一组读取是否会成功。

于 2013-04-19T00:24:51.553 回答