c语言,链表,指针方面的问题

#include<stdio.h>#include<malloc.h>#defineLENsizeof(structperson)#defineNULL0structpe... #include <stdio.h>
#include <malloc.h>
#define LEN sizeof(struct person)
#define NULL 0
struct person
{
int num;
int count;
struct person * next;
};
void main()
{
struct person *head,*p1,*p2;
struct person *p;
int n=0;
p1=p2=(struct person *) malloc(LEN );
scanf("%d,%d",&p1->num,&p1->count);
head=NULL;
while(p1->num!=0)
{
n++;
if(n==1)head=p1;
else p2->next=p1;
p2=p1;
p1=(struct person *)malloc(LEN );
scanf("%d,%d",&p1->num,&p1->count);

}
p2->next=NULL;
for(p=head;p<=head+n;p++)
{printf("%d,%d\n",p->num,p->count);}
getch();
}

以上是题目,
我的输入是
2,3
4,6
0,0
为什么输出却是
2,3
-33686019,-1414812757
0,0
分不多了,还望大神不吝赐教
展开
 我来答
kyno_yang
2011-03-25 · TA获得超过248个赞
知道答主
回答量:85
采纳率:0%
帮助的人:101万
展开全部
for(p=head;p<=head+n;p++)
{printf("%d,%d\n",p->num,p->count);}
问题处在这里 链表的存储内存不是连续的 所以不能++来进行遍历,链表的节点里面有next指针就是为了遍历链表才设的,
你应该这么些
for (p = head; p != NULL; p = p->next)
lixiaolan86105
2011-03-25 · 超过25用户采纳过TA的回答
知道答主
回答量:56
采纳率:100%
帮助的人:48.5万
展开全部
问题出在这里:for(p=head;p<=head+n;p++),链表的地址是不连续的,你不能用p++来得到next的地址,一般输出链表要p=p->next来找到下一个结构体地址。另外,你多输出了一个数值是因为你的n值不符合,应该是小于而不是小于或等于。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
airlrj
2011-03-25
知道答主
回答量:28
采纳率:0%
帮助的人:15.8万
展开全部
p2的值给覆盖了呀!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式