【发布时间】:2018-10-10 03:31:03
【问题描述】:
考虑到我有两个结构,其中一个指向另一个,我怎么能从第二个结构打印一个值,校准第一个?
以下程序的简要说明:
NODE,一个指向自身的结构体,用来堆成一堆,指向一个泛型指针 ALUNO,NODE 中的泛型指针将指向的结构 createNode,为节点分配内存的函数 preencherNode,用相应的 ALUNO 填充节点的指针 pushNode,新建一个节点,指向上一个创建的,做一堆 criarAluno,为 ALUNO 分配内存并填充它的 camps。
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int id;
float media;
} ALUNO;
typedef struct node
{
void *pointer;
struct node* link;
} NODE;
NODE* createNode(void)
{
NODE* topo;
topo=(NODE*)malloc(sizeof(NODE));
topo->pointer = NULL;
topo->link = NULL;
return(topo);
}
NODE* pushNode (NODE* topo)
{
NODE* novo;
novo=createNode();
novo->link=topo;
topo = novo;
return(topo);
}
NODE* preencherNode (NODE* topo, ALUNO* data)
{
topo->pointer=data;
return(topo);
}
ALUNO* criarAluno(FILE* v)
{
ALUNO* aln;
aln=(ALUNO*)malloc(sizeof(ALUNO));
int x;
float y1,y2;
fscanf (v, "%d %f %f",&x,&y1,&y2);
aln->id=x;
y1=(y1+y2)/2;
aln->media=y1;
return(aln);
}
void printData (NODE* topo)
{
NODE* aux;
aux=topo;
ALUNO* aln;
while(aux->link!=NULL)
{
aln=((ALUNO*)(aux->link));
printf("ID: %d \n",aln->id);
printf("Media: %f \n",aln->media);
printf("........................ \n");
aux=aux->link;
}
}
void main ()
{
FILE *doc;
doc = fopen("documento.txt","r");
if (doc==NULL){
printf("Nao ha como abrir o arquivo");
return(-1);
}
NODE *pilha;
pilha=createNode();
ALUNO* aluno;
int x;
for(x=0;x<11;x++)
{
aluno=criarAluno(doc);
pilha=preencherNode(pilha,aluno);
pilha=pushNode(pilha);
}
printData(pilha);
}
所以现在,函数 printData 正在打印我想要的值的分配空间内存,而不是值。
【问题讨论】:
-
请给minimal reproducible example。显示说明如何使用这两个结构的附加代码。
-
如果 node->pointer 真的是一个指向 ALUNO 的指针,那么你可以强制转换它。 int id = ((ALUNO *)node->pointer)->id; printf("%d", id);
-
我添加了一个更完整的版本以便更好地理解。
标签: c