提问人:shucha li 提问时间:10/9/2023 更新时间:10/9/2023 访问量:72
我需要 c 在程序中的帮助
I need help in the program by c
问:
#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 位。 帮助 😥😥😥😥😥😥😥
答:
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
评论
InitNode(p);
p