0

まず、申し訳ありませんが、この質問が多く寄せられることは承知しています。私はいくつかのアンサーを読みましたが、まだ動作するコードを書くことができていません。これは私の基本的なループですが、最後のノードしか読み取らないので、何が間違っていますか?

ありがとう。

これはグローバルです:

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);
}
4

1 に答える 1

1

最新の ( current) ポインタを格納するには、別の変数が必要です。コードは、ポインターがどのように接続されるかを示すための単なる例です。

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;
}
于 2013-07-01T11:31:29.980 に答える