c-链表-正在消失的数据



我需要一些关于这个链表练习的帮助。函数listTasks()应该显示struct task的所有实例。当我第一次执行函数时,它按预期工作,但当我再次执行它时,它不会显示struct action中的内容,即使我一个接一个地执行它们。

typedef struct action
{
    char parametre[100];
    char command[100];
    struct action* next;
    struct action* previous;
}* Action;
typedef struct task
{
    char name[100];
    struct task* next;
    struct task* previous;
    Action action;
}* Task;
void listTasks(Task tar, char* name)
{
    if(tar==NULL) printf("There is no task with the name: %sn",name);
    else
    {
        while(tar!=NULL&&strcmp(tar->name,name)!=0)
        {
            tar = tar->next;
        }
        if(tar!=NULL && strcmp(tar->name,name)==0)
        {
            printf("Task: %sn",tar->name);
            if(tar->action==NULL) printf("->It doesnt have any action.n");
            else if(tar->action!=NULL)
            {
                while(tar->action!=NULL)
                {
                    printf("->Command: %sn->->Parametre: %sn",tar->action->command,tar->action->parametre);
                    tar->action = tar->action->next;
                }
            }
        }
        else printf("There is no task with the name: %sn",name);
    }

}
void main()
{
   task a = NULL;
   listTasks(a,"random name");
}

您的问题在这里:

while(tar->action!=NULL)
{
    printf("->Command: %sn->->Parametre: %sn",tar->action->command,tar->action->parametre);
    tar->action = tar->action->next;
}

您正在破坏性地更改tar->action。是的,这是第一次,但在那之后,tar->action将是NULL,这就是数据"消失"的原因。

如果你不想破坏动作列表,你必须使用一个临时变量遍历它。大致如下:

struct action *action = tar->action;
while(action!=NULL)
{
    printf("->Command: %sn->->Parametre: %sn",action->command,action->parametre);
    action = action->next;
}

最新更新