首页 > 解决方案 > 将多个条目存储到链表中

问题描述

我有一个由多个日记条目组成的文本文件,我可以阅读它并将其存储到一个名为 Journal 的结构中。但是我现在的问题是我不知道如何将它逐个添加到链表中。

这是我的插入方法

void insertStart (LinkedList *list, Journal *JEntry) {
    Node *newNode;
    newNode = (Node*)malloc(sizeof(Node));
    newNode->data.day = JEntry->day;
    newNode->data.month = JEntry->month;
    newNode->data.year = JEntry->year;
    strcpy(newNode->data.entry, JEntry->entry);


    if (list == NULL) {
        list->head = newNode;
    }
    else {
        newNode->next = list->head;
        list->head = newNode;
    }
    printf("Inserted Entry = %d/%d/%d :%s\n", newNode->data.day, newNode->data.month, newNode->data.year, newNode->data.entry);
}

这是

fscanf(fo, "%d", &numEntry);
journal = (Journal *)malloc(numEntry * sizeof(Journal));

for (i=0; i<numEntry;i++) {
    fscanf(fo, "%d/%d/%d\n", &journal[i].day, &journal[i].month, &journal[i].year);
    fgets(journal[i].entry, SIZE, fo);

    }

    insertStart(list, journal);
    index = atoi(argv[1]);
    printf("%d-%02d-%02d: %s\n", journal[index].year, journal[index].month, journal[index].day, journal[index].entry);
    free(journal);
    fclose(fo);
}

这是我的结构


#define SIZE 102
typedef struct {
    int day;
    int month;
    int year;
    char entry[SIZE];
} Journal;


typedef struct Node {
    Journal data;
    struct Node *next;
} Node;

typedef struct {
    Node *head;
} LinkedList;

如果我将 insertStart 放在 for 循环中,是的,它输入了 4 次,但一遍又一遍的结果相同。

如果我把它放在上面显示的位置,它只会运行 1 次。

我现在的问题是如何将其余条目存储到链接列表中?谢谢你

这是文本文件的内容

4
12/04/2010 
Interview went well I think, though was told to wear shoes. 
18/04/2010 
Doc advised me to concentrate on something... I forget. 
03/05/2010 
Was asked today if I was an art exhibit. 
19/05/2010 
Apparently mudcakes not made of mud, or angry wasps.

第一个数字4是条目数,以防有人想知道。

标签: cstructlinked-list

解决方案


首先,您需要在创建时设置list->headNULL(或使用calloc代替malloc)。

但是,您的问题来自线路insertStart(list,journal);。虽然是指向对象journal数组开头的指针,但不知道这一点。它取消引用指针并且只将第一个日记条目添加到列表中。JournalinsertStart


推荐阅读