0

以下代码中的 printlist 函数不起作用。当我从主函数传递节点指针时,值不会传递。

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;
        }
    }
}  

** 注意:-创建列表工作正常我没有把它放在这里以减少问题的大小,我尝试在主函数中使用相同的打印技术,它就像一个魅力。只有当我尝试将它实现为错误开始的函数。

4

1 回答 1

3

您的主要问题在这里:

while(ch=1)
    {
        node *head;

headwhile块本地的。在 上创建一个新列表后case 1,该变量将超出范围并在循环到来之前消失,让您有机会打印它。所以你只是将未初始化的内存传递给printlist(). 你需要:

node * head;
while (ch=1) {

您的代码还有许多其他问题:

  • ch=1意味着while循环永远不会结束,你似乎永远不会改变ch
  • malloc()记忆head,但随后覆盖head你调用时的值createlist()并丢失该记忆,而从未使用过它。
  • node * current从未使用过
  • 不要从malloc()
于 2013-08-25T18:14:03.603 回答