gpt4 book ai didi

C编程,fscanf只输入最后一个元素

转载 作者:行者123 更新时间:2023-11-30 18:48:29 25 4
gpt4 key购买 nike

我试图从文件中获取多个元素并将其放入数组链表中,但它只输入文件的最后一个元素。

文件里面是

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。

最佳答案

您只调用 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;
}
}
}

关于C编程,fscanf只输入最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45681518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com