c链接列表从txt文件中读取

时间:2016-12-19 16:45:39

标签: c linked-list

我是c中的新手,想要创建一个可以从txt文件中读取链表的程序。例如,我的文件类似于

0 1 6 4 8 6 8 15 56 4 864 68

我想阅读信息,然后尝试将其显示给用户。 这就是我所做的。这给了我错误的预期表达式,然后将其写入我声明的主要部分。

A = readList(head); 
printList(head);

我的代码:

#include <stdio.h>
#include <stdlib.h>

typedef struct linkedList{
    int value;
    struct linkedList *next;
} linkedList, head;

linkedList *readList(linkedList *head)
{
    FILE *dataFile;
    dataFile = fopen("duom.txt", "r");
    if(dataFile == NULL) {
        printf("Nepasisekė atidaryti failo\n");
    } else {
        printf("Duomenų failą pavyko atidaryti\n");
    }
    while (!feof (dataFile))
        if (head == NULL) {
            head = malloc(sizeof(linkedList));
            fscanf(dataFile, "%d", &head -> value);
            head -> next = NULL;
        } else {
            struct linkedList *current = head;
            struct linkedList *temp = malloc(sizeof(linkedList));
            while(current -> next != NULL) {
                current = current -> next;
            }
            fscanf(dataFile, "%d", &temp -> value);
            current -> next = temp;
            temp -> next = NULL;
        }
    return head;
}
void printList(linkedList *head)
{
    linkedList *current = head;
    while (current != NULL) {
        printf("%d->", current -> value);
        current = current -> next;
    }
    printf("NULL\n");
    return;
}
int main()
{
    linkedList A;
    A=readList(head);
    printList(head);
    return 0;
}

3 个答案:

答案 0 :(得分:2)

您在readList中为head分配空间,但是您在那里传递了一些不存在的参数(readList(head)和printList(head))。你可以做些什么来解决你的问题: 将您的主要内容更改为:

int main()
{
    linkedList *A = NULL; /* creating pointer to your linked list. */
    A=readList(A);  /* Read linked list from file (And allocate it if it's not allocated */
    printList(A); /* print list */
    return 0;
}

如果你希望A是全局可访问的,只需将指针A的声明移到main之外。

答案 1 :(得分:1)

回答你的问题

  

这写了我错误的预期表达式,它在主要部分写入它我声明A = readList(head);的printList(头);

你应该从

改变
linkedList A;
A=readList(head);

linkedList* A;
A=readList(head);

它应该解决你所描述的问题。

答案 2 :(得分:0)

我认为您的typedef

存在问题

typedef是pre-proccessing

的操作的一部分

它将替换你的代码中的所有#define和typedef。

所以你的double typedef typedef struct Linkedlist { .... } linkedList, head;

创建2个新类型,它们是linkedList和head。

当您在代码中写下head时,它将被struct Linkedlist替换,因此在预处理操作之后原型中会出现错误,因为最终结果将为{{1} }

(阅读清单功能的原型)