gpt4 book ai didi

c - 添加的值不会保存在节点中

转载 作者:太空宇宙 更新时间:2023-11-04 03:47:58 25 4
gpt4 key购买 nike

请帮助值一旦添加到列表中就不会保存,结果不会打印任何内容

#include <stdio.h>
#include <stdlib.h>


struct node{
char first[30];
char last[30];
char address[100];
char postal[6];
char number[10];
struct node* next;
};

typedef struct node node;


void print(node* root);
node* add(node* root);
void addinfo(node* root);

int main(){
node* root=NULL;
root=add(root);
print(root);
return 0;
}

它应该在列表的末尾添加一个新节点然后添加值

node* add(node* root){
if(root==NULL){
root=(node*) malloc(sizeof(node));
addinfo(root);
root->next=NULL;
return root;
}
node* temp=root;
while(temp!=NULL){
temp=temp->next;
}
temp=(node*)malloc(sizeof(node));
addinfo(temp);
temp->next=NULL;
return root;

}

void print(node* root){
node* temp=root;
while(temp!=NULL){
printf("First Name: %s\n",temp->first);
printf("Last Name:%s\n",temp->last);
printf("Address:%s\n",temp->address);
printf("Postal%s\n",temp->postal);
printf("Phone Number:%s\n",temp->number);
temp=temp->next;
}
}

如果我在函数中打印,值会正常打印,但一旦此函数结束,所有值都会消失。

void addinfo(node* root){
node* temp=root;
while(temp!=NULL){
temp=temp->next;
}
temp=malloc(sizeof(node));
printf("Please enter a name:");
gets(temp->first);

printf("Please enter a last name:");
gets(temp->last);

printf("Please enter an address:");
gets(temp->address);

printf("Please enter a postal code:");
gets(temp->postal);

printf("Please enter a phone number:");
gets(temp->number);
}

最佳答案

实现你想要的最简单的方法是保持一个指向列表最后一项的指针:

typedef struct list {
node *first;
node *last;
} list;

然后你用

初始化一个列表
list alist = { NULL, NULL };

并按如下方式添加项目:

void addNewNode(list *plist, node *pnode)
{
pnode->next = NULL;
if( plist->first == NULL)
plist->first = pnode;
else
plist->last->next = pnode;
plist->last = pnode;
}

填写列表:

while(there_is_something_to_read())
{
node *newnode = malloc(sizeof(node));
addInfo(newnode);
addNewNode(&alist, newnode);
}

但是请注意,addInfo() 应该按照它的名字所说的那样做:向节点添加信息;没有列表操作:

void addinfo(node* pnode){
printf("Please enter a name:");
gets(pnode->first);
// .........
printf("Please enter a phone number:");
gets(pnode->number);
}

打印它:

node *pnode;
for(pnode = alist.first; pnode != NULL; pnode = pnode->next)
printNode(pnode);

void printNode(node *pnode)
{
printf( "first name: %s\n", pnode->first);
//...
printf( "phone: %s\n", pnode->number);
printf( "\n");
}

关于c - 添加的值不会保存在节点中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22884675/

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