我需要 c 在程序中的帮助

I need help in the program by c

提问人:shucha li 提问时间:10/9/2023 更新时间:10/9/2023 访问量:72

问:

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

typedef int Datatype;
typedef struct singlyLinkedList
{
  Datatype data;
  struct singlyLinkedList *next; 
}node;
typedef node *linkList;

void InitNode(node *n){
    n=(node*)malloc(sizeof(node));
    n->data=9999;
    n->next=NULL;
}

linkList CreateListOnL(void){
    int value;
    linkList head=NULL;
    puts("if input 9999 then end");
    puts("input, please:");
    scanf("%d",&value);
    while (value!=9999)
    {
        node *p=NULL;
        InitNode(p);
        if(!p){
            puts("fail");
            exit(EXIT_FAILURE);
        }
        p->data=value;
        p->next=head;
        head=p;

        puts("input the value, please:");
        scanf("%d",&value);
    }

    return head;
}

int main(void){
    linkList L;
    L=CreateListOnL();

    linkList head;
    node *p;

    head=L;
    p=head;

    int i=1;
    while (p->next!=NULL)
    {
        printf("linked-list %dst:%d\n",i,p->data);
        i++;
    }

    printf("linked list %dst:%d\n",i,p->data);
}

我研究了链接链接,所以我用 C 语言将代码涂白。 但是我是C语言初学者,我尝试运行该程序,但是失败了,找不到错误。 该程序可以编译,并且没有错误。 编译为 MinGw-w64 GCC 11.4.0 64 位。 帮助 😥😥😥😥😥😥😥

c 链接列表 malloc

评论

1赞 Support Ukraine 10/9/2023
至少有一个问题是不会改变InitNode(p);p

答:

2赞 Grinza 10/9/2023 #1

主要问题出在 InitNode 函数中。

那应该是:

void InitNode(node **n){
*n=(node*)malloc(sizeof(node));
(*n)->data=9999;
(*n)->next=NULL;
}

这样,您可以使用指针的地址。在您的版本中,您正在将 NULL 指针传递给该函数。 (像这样调用函数:InitNode(&p);)

另一个问题是在链表的打印中。 在 while 循环中,您没有更新指针,而是得到一个无限循环。 您必须添加:

p = p->next;

评论

0赞 Gerhardh 10/9/2023
您可以通过对源代码应用适当的缩进来改进您的答案。此外,在 C 中,不需要也不建议强制转换 的返回值。它要么毫无用处,要么甚至隐藏错误。您应该删除该演员表。malloc