【发布时间】:2016-10-20 05:21:52
【问题描述】:
目标
创建结构数组的数组,维度基于文件。然后将其存储到链接列表中。
我正在读取格式如下的文件:
读取格式如下的文件:
name (string) country (string) age (int)
john USA 54
Sam Aus 18
ect
我不知道文件会有多少行和列,也不知道每列是什么变量类型
所以理论上结构的第一个数组将包含 [NUMBER OF COLUMNS] 结构,这些结构将沿行存储每个变量(使用 void 指针和类型转换)(所以 strucArrayCol[0] = john , structArrayCol[1] = USA等)。
这些结构数组中的每一个都将存储到另一个结构数组中,该数组将具有 [NUMBER OF ROWS] 元素,因此 strucArray2Row[0] = strucArrayCol(包含 john 、 USA 和 54)和 strucArrayRow[1] 将包含另一个strucArrayCol 其中包含 (sam Aus 18)。
所以现在我可以读取文件,找到行数、列以及每列的变量类型。
这是我开始遇到麻烦的地方,因为我不知道该怎么做
1. How to create this array within array ( I know i need to use Malloc)
2.How I would store the variables in the first array of struc, if I
wanted to store age could I just do
void *data = malloc(sizeof(int));
*((int*)data) = TEMP_AGE;
void 数据是 StrucArrayCol 中的结构(在本例中,如果我想存储 John 的年龄 void* 数据将在 StrucArrayCol[3] 中,它位于 StucArrayRow[0] 中,因为它是第 3 列第一行)
对不起,如果这有意义 谢谢
【问题讨论】:
-
如果你不知道结构体的原型(总是有名字、国家、年龄),那么根本不需要使用结构体。您可以只对每一列进行一维数组,因为它们具有相同的类型。然后创建一个包含每个数组地址的新数组。
-
对不起,我不擅长解释,问题是我不知道每一列会是什么,而且我必须把它放在“通用链接列表”中,所以我认为这是最好的方法处理未知类型的变量
-
是的,但是当您可以解析每个列的数据类型时,为什么要使用结构,您可以使用这种数据类型的数组。如果所有列表中都有相同的变量(可能顺序不同,但名称/类型不变),则结构将很有用,然后您可以使用结构并用列表的解析值填充它到下一个数组中的结构和列表中的下一行,然后再做一次。
-
所以问题是你事先知道结构成员的类型吗?假设它总是有两个字符串和一个 int 还是每次都会改变?
-
为什么要使用结构体?只有当您知道应该将哪些成员放入该结构时,该结构才会起作用。您不需要仅用于字符串的结构。