以下代码中的printlist函数不起作用。当我从main函数传递节点指针时,不传递值。
void printlist(node *head)
{
node *current=head;
while(current!=NULL)
{
printf("\n %d",current->data);
current=current->next;
}
}
int main(void)
{
int ch=1;
int choice=1;
while(ch=1)
{
node *head;
head=(node*)malloc(sizeof(node));
printf("Press 1 for create list \n2 for display \n3 for add at end of list \n");
scanf("%d",&choice);`
switch(choice) {
case 1:
head=createlist();
node *current=head;
break;
case 2:
printf("Welcome to list printer");
printlist(head);
break;
}
}
}
**注意: - 创建列表工作正常我没有把它放在这里以减少问题的大小,我尝试在主要功能中使用相同的打印技术,它已经像魅力一样工作。只有当我试图将其实现为错误开始的函数。
答案 0 :(得分:3)
你的主要问题在于:
while(ch=1)
{
node *head;
head
是while
块的本地。在case 1
上创建一个新列表后,该变量将超出范围并在循环结束前消失,以便您有机会打印它。所以你只是将未初始化的内存传递给printlist()
。你需要:
node * head;
while (ch=1) {
您的代码存在许多其他问题:
ch=1
表示while循环永远不会结束,您似乎永远不会改变ch
。malloc()
的{{1}}内存,但是当你调用head
时会覆盖head
的值并丢失内存,而不会使用它。createlist()
从未使用node * current