gpt4 book ai didi

c - 链接列表 - 消失的数据

转载 作者:太空宇宙 更新时间:2023-11-04 06:28:26 24 4
gpt4 key购买 nike

我需要一些关于这个链表练习的帮助。函数 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: %s\n",name);
else
{
while(tar!=NULL&&strcmp(tar->name,name)!=0)
{
tar = tar->next;
}
if(tar!=NULL && strcmp(tar->name,name)==0)
{
printf("Task: %s\n",tar->name);
if(tar->action==NULL) printf("->It doesnt have any action.\n");
else if(tar->action!=NULL)
{
while(tar->action!=NULL)
{
printf("->Command: %s\n->->Parametre: %s\n",tar->action->command,tar->action->parametre);
tar->action = tar->action->next;
}
}
}
else printf("There is no task with the name: %s\n",name);
}


}

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

最佳答案

你的问题在这里:

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

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

如果你不想破坏 Action 列表,你必须使用一个临时变量来遍历它。类似的东西:

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

关于c - 链接列表 - 消失的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23280410/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com