C中通过文件的多项式赋值

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 <

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

文件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;   
}
正如它的名字所说,你的多点指针是一个指针。因此,如果您使用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;我完全完成了