gpt4 book ai didi

c - C中通过文件进行多项式赋值

转载 作者:行者123 更新时间:2023-11-30 21:05:36 26 4
gpt4 key购买 nike

我想把从文件中输入的指数和系数信息赋给循环链表。

文件“a.txt”如下

8 3
7 2
3 0

但是,输出中也存在像这样的奇怪值。我想让这个列表循环播放,但事实并非如此。

coef    expon 
3 0
7 2
8 3
7887744 0
7900240 0
7864656 0
7869712 0
7900240 0
7864656 0
7869712 0

拜托,我找不到解决方案。

#include <stdio.h>
#include <stdlib.h>
typedef struct polyNode* polyPointer;
typedef struct polyNode{
int coef;
int expon;
polyPointer link;
};

int main() {
polyPointer A, B, C = (polyPointer)malloc(sizeof(polyPointer)) ;
FILE *fa, *fb ;
int a;

fa = fopen("a.txt", "r");
if(fa==NULL){
printf("file open error\n");
return 1;
}
if(fb==NULL){
printf("file open error\n");
return 1;
}
A = create_circle_linked_poly(fa);
printf("coef expon\n");
int i;
for(A; i<10; A=A->link, i++)
printf("%d %d\n", A->coef, A->expon);
return 0;
}

polyPointer create_circle_linked_poly(FILE *a){
polyPointer head = malloc(sizeof(polyPointer));
polyPointer temp = malloc(sizeof(polyPointer));
first = head;
int res;
while(1){
polyPointer p =(polyPointer) malloc(sizeof(polyPointer));
res = fscanf(a, "%d %d", &p->coef, &p->expon);
if(res==EOF)break;
p->link = head;
head = p;
}
return head;
}

最佳答案

正如其名称所示,您的 polyPointer 是一个指针。因此,如果您 malloc(sizeof(polyPointer)) 您只分配了指针的大小。但是您想要分配一个对象,所以
malloc(sizeof(*polyPointer))

您进一步检查 fb 是否已使用 if(fb==NULL){... 打开。幸运的是,fb 已被初始化,并且可能不会为 NULL,但您从未为该文件调用 fopen

我在您的 for 循环中看到您迭代直到 i 为 10,但是 a) i 未初始化,因此可能是 -123456 左右,b) 您从不检查是否已到达链接列表的末尾。所以最后打印的元素是未定义的(垃圾)。因此,将 for 循环更改为:
for(i=0; i<10 && A!=NULL; A=A->link, i++)

并且不要转换 malloc 的结果。它返回一个 void 指针,该指针与任何指针类型兼容。

关于c - C中通过文件进行多项式赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53683015/

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