从文件中读取并将格式化的行输入到链接列表。 C

时间:2016-03-31 16:40:00

标签: c file-io linked-list

我正在尝试从文件中逐行读取格式化字符串并将其存储在链接列表中。

我的typedef:

typedef struct s_deck {
    char name[16];
    int atk;
    int def;
    int cost;
    struct s_deck* next;
} card;

我正在阅读的文件示例:

Line 1: Name 4 4 5
Line 2: Name2 5 5 5

我的功能我正在努力实现这样的事情......

card *LoadDeck() {
    FILE* file = fopen("text", "r");
    if(file == NULL) {
        printf("unable to open file...\n");
    }
    char line[16];
    card* start = NULL;
    card* newest = NULL;
    card* previous = NULL;

    fgets(line, 15, file);
    card* newCard = malloc(sizeof(card));
    sscanf(line, "%s %d %d %d\n", newCard->name, &newCard->atk,
                &newCard->def, &newCard->cost);
    printf("Added:%s Attack:%d Defense:%d Cost:%d\n", newCard->name,    newCard->atk,
                newCard->def, newCard->cost);

    if (start == NULL) {
        start = LoadDeck(NULL);
        newest = start;
    } 
    else {
        newest = LoadDeck(newest);
    }

    if (previous != NULL) {
        previous->next = newCard;
    }
    fclose(file);
    return newCard;
}

所以我的问题是它是一个无限循环,它只读取第一行和第一行。我所拥有的printf是看它正在做什么......以及它正确读取线条但它只是继续这样做而且从不停止。

我不知道它是否正确创建了一个链表。我没有那么远。我认为我已经正确实施了它,但它只是如此艰难。我试图在这里找到一些问题但他们正在阅读的文件比我的文件要复杂得多,所以我认为应该有一个更简单的方法。

1 个答案:

答案 0 :(得分:1)

嗯,我知道也许我应该把它放在评论中但对不起我没有足够的声誉去做。无论如何,我认为你的程序无休止地循环,因为你的 start 变量总是为NULL,首先调用该函数将导致函数在发现 start == NULL 后调用自身是的,后续调用将始终导致无限递归,因为start始终为NULL。 你写的这些行是黑洞

   if (start == NULL) {
    start = LoadDeck(NULL);
    newest = start; } 

它没有为 start 变量赋值,它只会导致无休止的递归。