我需要做的是将文本文件读入数组。每条线有四个部分;名字,身份证,身高和体重。文本文件中有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;
}
}
}
答案 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
标准通常不是一个好主意。它没有很好地说明下一组读取是否会成功。