如何将文本文件读入指针数组? (C ++)

时间:2013-04-19 00:22:00

标签: c++ codeblocks

我需要做的是将文本文件读入数组。每条线有四个部分;名字,身份证,身高和体重。文本文件中有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;


    }
}
}

1 个答案:

答案 0 :(得分:1)

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

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

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

要说清楚,你肯定没有像你所说的指针数组。相反,你有一个person s的数组。

ptr = &array[0];

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

ptr = array;

另外,eof()作为while标准通常不是一个好主意。它没有很好地说明下一组读取是否会成功。