c-通过文本文件读取并显示链接列表



我正在尝试读取链接列表中的文本文件并成功显示它。但我一直收到对应于(head==NULL)的"list is Empty"消息,而我可以通过在读取函数中使用put(id->…)参数成功读取并打印一次文件,但我无法访问上面提到的显示函数。

    struct node
    {
        char name[50];
        int id;
        struct node *next;
    } *head;
    int main()
    {
        int i,num;
        struct node *r;
        head=NULL;
        readfile(*r);
        while (1)
        {
            printf("nList Operationsn");
            printf("============n");
            printf("1.Insertn");
            printf("2.Displayn");
            printf("3.Delete by IDn");
            printf("4.Delete by Namen");
            printf("5.Exitn");
            printf("Enter your choice: ");
            if (scanf("%d", &i) <= 0){
                printf("Enter only an integern");
                exit(0);
            } else {
                switch(i)
                {
                     case 1:
                        if(head==NULL)
                        {
                            printf("List is Emptyn");
                        }
                        else
                        {
                            printf("Element in the list are: ");
                        }
                        display(r);
                        break;
                    case 2: 
                        return 0;
                    default:
                        printf("Invalid Choicen");
                 }
         }
}
void readfile(struct node *r)
{
    r=head;
    char str[50];
    int id;
    FILE *ifp=fopen("One.txt","r");
    while (fgets(str,50,ifp)!=NULL){
        r =(struct node *)malloc(sizeof(struct node));
        char *token=strtok(str,",");
        strcpy(r->name,token);
        puts(r->name);
        token=strtok(NULL,"n");
        r->id=token;
        puts(r->id);
        r->next=NULL;
        r=r->next;
        }
}
void display(struct node *r)
{
    r = head;
    if(r == NULL)
    {
        return;
    }
    while(r != NULL)
    {
        printf("Student %s has id %d.n", r->name,r->id);
        r = r->next;
    }
    printf("n");
}

在您提供的代码中,您从未向head分配或分配任何内容。我想你需要在下面的某个地方添加代码

if (head == NULL) {
    head = r;
}

if (head == NULL) {
    head = (struct node *)malloc(sizeof(struct node));
    // and initialize it with something
}

此外,我建议您创建更通用的函数,如add_node,如

void add_node( struct node *r ) {
    if(head == NULL) {
        head = r;
    } else {
        struct node* n = head;
        while(n->next != NULL) { // go to the end of the list
        }
        r->next = NULL; // to be sure this will be end of list
        n->next = r;
    }
}

然后在readfile中读取数据,创建新节点并将其传递给add_node

相关内容

  • 没有找到相关文章

最新更新