所以我有这个链表,它的工作原理,但只有当你添加一个项目的列表。这里是我的代码吧:添加到链接列表帮助? c语言只有
struct node{
char key[10];
char content[20];
struct node *next;
};
struct node *head=(struct node *) NULL;
struct node *tail=(struct node *) NULL;
struct node * initinode(char *key, char *content)
{
struct node *ptr;
ptr = (struct node *) malloc(sizeof(struct node));
if(ptr == NULL)
return (struct node *) NULL;
else {
strcpy(ptr->key, key);
strcpy(ptr->content,content);
return ptr;
}
}
void printnode(struct node *ptr)
{
printf("Key ->%s\n", ptr->key);
printf("Contents ->%d\n", ptr->content);
}
void printlist(struct node *ptr)
{
while(ptr != NULL)
{
printnode(ptr);
ptr = ptr->next;
}
}
void add(struct node *new)
{
if(head == NULL) {
head = new;
tail=new;
}
else {
tail->next = new;
tail->next=NULL;
}
}
所以,当我尝试添加三个项目名单,并打印它只会显示像这三个中的第一项:
struct node *ptr;
char *terminal="term";
char *term;
term=getenv("TERM");
ptr=initinode(terminal, term);
add(ptr);
//-----------------------
char ccterm[20];
char *ret, tty[40];
char *currTerminal="tty";
if ((ret = ttyname(STDIN_FILENO)) == NULL)
perror("ttyname() error");
else {
strcpy(tty, ret);
}
ptr=initinode(currTerminal, tty);
add(ptr);
//----------------------------------
char cwd[1024];
char *st="date";
time_t t;
char ti[30];
time(&t);
char date;
date=t;
sprintf(ti,"%s", ctime(&t));
ptr=initinode(st, ti);
add(ptr);
printlist(ptr);
这使我想起我最后一个问题,当我添加这些列表中的任何一个它只输出int值,所以我怎么会打印出列表中的字符串值。我曾尝试修改我的代码为男性内容的字符串,但它从来没有工作过。任何意见是极大的赞赏,并感谢您
感谢它修复了int问题,但我仍然无法将正确添加到我的列表中。当我使用sprintf进行字符串表示时,它像最后一个项目一样不会添加,并且它仍然只是将一个项目添加到列表中。 – 2013-02-27 05:09:13
@Noob程序员,您需要打印列表(头),而不是打印列表(ptr)来获取整个列表。 – 2013-02-27 06:17:31
非常感谢你所说的一切,真的帮助了我,并为我的计划工作。 – 2013-02-27 13:59:12