C中通过文件的多项式赋值
我想将从文件中输入的指数和系数信息指定给循环链表 文件a.txt如下所示C中通过文件的多项式赋值,c,file-io,polynomials,C,File Io,Polynomials,我想将从文件中输入的指数和系数信息指定给循环链表 文件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 <
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;
}
正如它的名字所说,你的多点指针是一个指针。因此,如果您使用mallocsizeofpolyPointer,则只分配指针的大小。但是您想要分配一个对象,mallocsizeof*polyPointer也是如此
您进一步检查fb是否是使用iffb==NULL{…打开的,幸运的是fb已初始化,可能不会为NULL,但您从未为该文件调用过fopen
我在for循环中看到,你一直迭代到I为10,但a I未初始化,因此可能为-123456左右,b你从不检查是否已到达链接列表的末尾。因此,最后打印的元素是未定义的垃圾。因此,将for循环更改为:fori=0;ilink,I++
不要强制转换malloc的结果。它返回一个与任何指针类型兼容的空指针。sizeofpolyPointer看起来是错误的,因为polyPointer是一个typedef的指针Hint:不要强制转换malloc的返回值;hint2:将对象本身用作sizeof的操作数;hint3:不要将标识符的指针性隐藏在typedef.s后面truct polyNode*head=mallocn*sizeof*head;我完全完成了