无法在c中打印链表中的元素
我只是在学习链表。 当我试图在链表中插入元素时,我无法打印这些插入的元素无法在c中打印链表中的元素,c,C,我只是在学习链表。 当我试图在链表中插入元素时,我无法打印这些插入的元素 int main() { int i,x,n; struct node* head = NULL; printf("Enter number of elements to insert into likedlist :"); scanf("%d",&n); printf("Enter elements: "); for(i=0;i<n;i++)
int main()
{
int i,x,n;
struct node* head = NULL;
printf("Enter number of elements to insert into likedlist :");
scanf("%d",&n);
printf("Enter elements: ");
for(i=0;i<n;i++)
{
scanf("%d",&x);
insert(head,x);
}
print(head);
}
struct node* insert(struct node* head,int x)
{
struct node* p = (struct node*)malloc(sizeof(struct node));
p->data = x;
p->next = NULL;
if(head == NULL)
{
head = p;
return head;
}
p->next = head;
head = p;
return head;
}
那么,这个代码有什么问题呢。
输出是这样的
样本输入:
Enter number of elements to insert into likedlist :5
Enter elements: 1 2 3 4 5
样本输出:
NULL
阅读更多关于C编程的内容(首先是一些好的教程,然后是一些,稍后再参考C11标准)。我们不能用几段来教你 C使用a 因此,至少对于新手来说,传统上建议(但不是必需的)永远不要将形式参数用作某些赋值的左侧目标,因为对形式参数的任何更改都是具有该形式参数的函数的局部更改,并且不会影响调用方
因此,使用所有警告和调试信息编译:
gcc-Wall-Wextra-g
使用调试器(例如)了解程序的行为(您的错误可能不在您显示的代码块中)
理解整个程序的行为并对其进行调试的能力是开发人员的一项基本技能。编译器的警告和调试器都可以帮助您理解程序的行为。另请参见,以获取有用的信息
因此,insert
中的head
形式参数是调用方实际参数的本地副本
在
您只修改该副本,而不是原始副本。因此head=p上面的代码>是完全无用的(并且令人困惑),您最好用返回p替换上面大括号中的块代码>
我们不知道您如何调用insert
,我们无法提供更多帮助
也许insert
应该得到某个指针的地址。。。。或者您的main
应该使用它的返回值
在已编辑的问题中,在主文中
,替换
insert(head,x); //WRONG
(不会更改main
中声明的本地头
,即使insert
正在更改其第一个形式,因为通过值调用参数传递)
使用所有警告和调试信息编译:gcc-Wall-Wextra-g
with。使用调试器(例如)了解您的程序的行为StackOverflow不是DoMy Home service。您没有提供任何。您显示的代码工作正常。因此,您没有显示的代码必须被破坏。这就是为什么网站规则要求。如果问题不包括a,则该问题不属于主题。确保main()
doeshead=insert(head,n)
这就是它返回新值的原因。是的,但我们都猜测OP在main
中没有使用它,所以这是main()
的问题,而不是这个函数的问题代码>更改呼叫站点上的某些内容谢谢各位,对于给您带来的不便,我深表歉意。
if(head == NULL)
{
head = p;
return head;
}
insert(head,x); //WRONG
head = insert(head, x);