我正在努力克服此错误。我的功能应该是将文件中的数据读取到结构数组中。
数据文件示例:
1234 52 70 75
2134 90 76 90
3124 90 95 98
结构定义(稍后会计算平均值):
struct Student
{
int id, testOne, testTwo, testThree;
float average;
};
typedef Student student_array[SIZE];
功能:
void SetArrays (student_array * s)
{
student_array *ptr = s;
fstream fin ("lab5_data.txt");
if (fin.is_open())
{
fin >> ptr->id;
}
}
我不知道如何使用指针算法来遍历该函数,这是我得到的错误:
[错误]请求“ * ptr”中的成员“ id”,这是非类类型 'student_array {aka学生[20]}'
解决方案:
我能够通过此处提供的建议以及reddit解决该问题。这是我的解决方案,谢谢大家。
void SetArrays (Student * ptr)
{
//TODO: Function Spec:
fstream fin("lab5_data.txt");
cout << "Data read in:" << endl;
if (fin.is_open())
{
for (int i = 0 ; i < SIZE ; ptr++, i++)
{
fin >> ptr->id;
fin >> ptr->testOne;
fin >> ptr->testTwo;
fin>> ptr->testThree;
答案 0 :(得分:2)
ptr
是指向数组的指针。
*ptr
取消引用指针,因此结果是一个数组。
(*ptr)[i]
是该数组的元素,它是Student
结构。
(*ptr)[i].id
是该结构的成员。
您的代码是错误的,因为它尝试使用ptr
来解除对->
的引用(到目前为止,还不错,ptr
是一个指针,因此解除引用是有效的操作),但是随后尝试立即获取id
成员,但它仍在查看整个数组。编译器消息粗略表示“您告诉我获取数组的id
字段,这是没有意义的,因为数组仅具有索引,而没有命名字段”。
如果要使用指针算术,则更容易摆脱typedef
和指针到数组的业务:
void SetArrays (Student *ptr)
{
fstream fin ("lab5_data.txt");
if (fin.is_open())
{
while (fin >> ptr->id)
{
ptr++; // advance to the next array element
}
}
}
在此版本中,该函数使用指向第一个元素的指针(并使用++
来遍历数组),而不是指向整个数组的指针。
答案 1 :(得分:-2)
student_array是一个数组。
您需要读入该数组的给定元素
像这样
{
"id": "d054dae5-173d-478b-bb0e-7516e6a24476",
"ProductName": "Data 100",
"ProviderLiabilities": []
}
您可能想要循环并将循环索引用作数组索引