我正在尝试从文件中获取多个元素并将其放入我的数组链表中,但它只输入文件的最后一个元素。
文件内部是
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
这是我的代码
typedef struct node{
int elem;
struct node *next;
}node;
void insert(node **a)
{
int temp,elem;
node *tempstruct;
tempstruct = (*node)malloc(sizeof(struct node));
FILE *fp;
if(fp = fopen("input.txt","r")){
while(fscanf(fp,"%d",&elem)==1){
temp = elem%10;
tempstruct->elem = elem;
tempstruct->next = a[temp];
a[temp] = tempstruct;
}
}
}
预期输出应为
A[0] 10
A[1] 11 1
A[2] 12 2
A[3] 13 3
A[4] 14 4
A[5] 15 5
A[6] 16 6
A[7] 17 7
A[8] 18 8
A[9] 19 9
但我得到的是
A[0] 19
A[1] 19
A[2] 19
A[3] 19
A[4] 19
A[5] 19
A[6] 19
A[7] 19
A[8] 19
A[9] 19
我正在尝试将索引中的元素放在与其数字对应的索引中,但它所放置的是最后一个19的元素。
答案 0 :(得分:2)
您只能一次调用malloc
,因此最终会遇到阵列中所有元素都指向同一对象的情况。相反,您应该为每次成功扫描调用malloc
。
像:
void insert(node **a)
{
int temp,elem;
node *tempstruct;
FILE *fp;
if(fp = fopen("input.txt","r")){
while(fscanf(fp,"%d",&elem)==1){
tempstruct = malloc(sizeof(struct node)); // malloc inside the loop
temp = elem % 10; // Find the index where the new object shall be added
tempstruct->elem = elem;
tempstruct->next = a[temp];
a[temp] = tempstruct;
}
}
}