#include<stdio.h>
#include<stdlib.h>
struct list
{
int a;
int b;
int c;
struct list *next;
};
struct list* addlistele(struct list*,int,int,int);
/* List c element */
void listc()
{
printf(" soon...n");
}
void printlist(list)
{
struct list* temp;
temp=list;
while(temp!=NULL)
{
printf("a:%d,b;%d,c:%dn",temp->a,temp->b,temp->c);
temp=temp->next;
}
}
/* List element */
struct list* addlistele(struct list* listadd,int b,int d,int m)
{
int i;
struct list* temp;
struct list* addelement=(struct list*)malloc(sizeof(struct list));
addelement->a=b;
addelement->b=d;
addelement->c=m;
addelement->next=NULL;
if(listadd==NULL)
{
printf("entering");
return addelement;
}
else
{
temp=listadd;
while(temp->next!=NULL)
{
temp=temp->next;
}
temp->next=addelement;
}
return listadd;
}
int main()
{
int ch,i,a,b,c;
struct list *element,*list;
element=(struct list*)malloc(sizeof(struct list));
printf("Choose any one of the option n");
printf("1.List All n 2.List c n");
scanf("%d",&ch);
switch(ch)
{
case 1:printf("Enter values n");
for(i=0;i<2;i++)
{
scanf("%d %d %d n",&a,&b,&c);
list=addlistele(element,a,b,c);
}
printlist(list);
break;
case 2:listc(); break;
default:break;
}
}
大家好,我已经编写了像上面的代码。当我提供意见时
> Choose any one of the option
> 1.List All
> 2.List c 1 Enter values 2 3 4 1 2 3
The output is
a:0,b;0,c:0
a:2,b;3,c:4
a:1,b;2,c:3
而且它没有先添加元素,我的意思是它没有进入这个循环
if(listadd==NULL)
{
printf("entering");
return addelement;
}
如何使头部元素为 NULL,我也不知道 0 是如何先出现的。谁能告诉我会有什么问题?
在main()
中创建 head 元素并将其传递给 addlistele()
函数。
element=(struct list*)malloc(sizeof(struct list));
...
list=addlistele(element,a,b,c);
您看到的第一个元素没有预期的有效值。
解决方案是您将元素malloc()
在函数中而不是main()
中,并且不要在main()
中分配element
。
替换
struct list *element,*list;
element=(struct list*)malloc(sizeof(struct list));
跟
struct list *list=NULL;
然后
取代
list=addlistele(element,a,b,c);
跟
list=addlistele(list,a,b,c);
也
取代
void printlist(list)
跟
void printlist(struct list *list)
和
将scanf("%d %d %d n",&a,&b,&c);
替换为scanf("%d %d %d",&a,&b,&c);