我想在 C 中存储东西(比如人)的关系。我想出了
#include <stdio.h>
int main(void)
{
typedef struct rel
{
int person; // person #
int num; // number of relationships recorded
int relationship[]; // the person # of the person's relationships
} rel;
rel rels[10];
int person = 0;
int num;
int i;
// Adding persons
for (i = 0; i < 10; i++)
{
rels[i].person = i;
}
// Adding random relationships for person #0
for (i = 1; i < 10; i+=2)
{
num = rels[0].num;
rels[0].relationship[num] = i;
rels[0].num += 1;
}
// Reading all relationships of person #0
for (i = 0; i < rels[0].num; i ++)
{
printf("Person1 (%d) -> Person2: (%d)n", person, rels[0].relationship[i]);
}
return 0;
}
但我不确定这是否是正确的方法。主要目的是捕获一个人的所有关系。
这种方法是错误的,因为没有空间来存储分配的关系。您应该分配数组来动态存储它们。
此外,您需要在使用其值之前初始化rels[0].num
,并在i
中添加一个而不是两个以打印所有关系。
#include <stdio.h>
#include <stdlib.h> /* for realloc() */
int main(void)
{
typedef struct rel
{
int person; // person #
int num; // number of relationships recorded
/* use a pointer for dynamic array */
int *relationship; // the person # of the person's relationships
} rel;
rel rels[10];
int person = 0;
int num;
int i;
// Adding persons
for (i = 0; i < 10; i++)
{
rels[i].person = i;
/* initialize members */
rels[i].num = 0;
rels[i].relationship = NULL;
}
// Adding random relationships for person #0
for (i = 0; i < 10; i++)
{
/* dynamically re-allocate the array */
int* newRelationship;
num = rels[0].num;
newRelationship = realloc(rels[0].relationship, sizeof(*rels[0].relationship) * (num + 1));
if (newRelationship == NULL)
{
perror("realloc");
return 1;
}
rels[0].relationship = newRelationship;
rels[0].relationship[num] = i;
rels[0].num += 1;
}
// Reading all relationships of person #0
for (i = 0; i < rels[0].num; i += 1) /* add one, not two, to print all relationships */
{
printf("Person1 (%d) -> Person2: (%d)n", person, rels[0].relationship[i]);
}
return 0;
}