C 将二进制文件读取到链接列表(仅读取最后一个节点)

C 将二进制文件读取到链接列表(仅读取最后一个节点),c,binary,linked-list,C,Binary,Linked List,首先,很抱歉,我知道这个问题被问了很多,我甚至读过几本书,但仍然没有写出一个有效的代码。这是我的基本循环,但它只读取最后一个节点,那么我做错了什么 谢谢 这是全球性的: struct Inventory { int cod; int quant; float price; char name[30]; struct Inventory *next; }; struct Inventory *inventory = NULL; 这是要读取的函数 void load(void) { FILE *p

首先,很抱歉,我知道这个问题被问了很多,我甚至读过几本书,但仍然没有写出一个有效的代码。这是我的基本循环,但它只读取最后一个节点,那么我做错了什么

谢谢

这是全球性的:

struct Inventory
{
int cod;
int quant;
float price;
char name[30];
struct Inventory *next;
};
struct Inventory *inventory = NULL;
这是要读取的函数

void load(void)
{
FILE *ptr;
ptr=fopen("inventory.dat", "rb+");
if (!ptr)
{
    return;

}
struct Inventory *p;
while(!feof(ptr))
{
    p = malloc(sizeof(struct Inventory));
    fread(p, sizeof(struct Inventory), 1, ptr);
    p->next = inventory;
    inventory = p;
}

fclose(ptr);
}

您需要另一个变量来存储最新(
当前
)指针。这段代码只是一个示例,说明指针是如何连接的

head
指向列表的开头,
current
指向列表中最近添加的内容。
->prox
指针指向列表中的下一项

while(!feof(ptr))
{
    p = malloc(sizeof(struct Inventory));
    if (!head)
    {
        head = malloc(sizeof(struct Inventory));   
        current = head;
    }
    fread(p, sizeof(struct Inventory), 1, ptr);
    current->prox = p;
    current = p;
}

请张贴完整的代码。谢谢你的解释。但是我恐怕还是不明白。我发现写链表代码最好的方法是画图表。这有助于我的理解。我用一个(标题)节点(以及指向它的指针)绘制了一个图,然后用另一个图表示两个节点,指针的变化如图所示。