| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1336 人关注过本帖
标题:[求助]程序执行异常!!菜鸟问题-链表的创建及显示问题
只看楼主 加入收藏
siyuan_gc
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-11-5
收藏
 问题点数:0 回复次数:11 
[求助]程序执行异常!!菜鸟问题-链表的创建及显示问题

初学c语言,自己编写了下面这个简单程序,编译无错,但运行时输入“n>1个”的情况时就会报错,新接触c,查了很久怎么查也找不出问题,希望大大们能指点迷津,先谢过了!(附上运行图片)
http://www.photo-host.org/img/385981264102162921517.gif

/*编写一个含n个结点的动态单链表,并显示*/

#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(struct stu)
#define NULL 0
struct stu
{char name[10];
struct stu *next;
};

struct stu *head,*p;
void *creat()
{
int n;
int num;
printf("请输入链表的结点个数:num=");
scanf("%d",&num);
printf("这是一个含有%d个结点的链表\n",num);
printf("请输入链表结点:name=\n");
p=head=(struct stu *)malloc(LEN);
scanf("%s,",&(p->name));
for(n=0;n<num-1;n++)
{p=p->next;
p=(struct stu *)malloc(LEN);

scanf("%s,",&(p->name));}
p->next=NULL;
return 0;
}

void dis(struct stu *head)
{
struct stu *p;
printf("创建的链表如下:\n");
p=head;
if(head!=NULL)
do
{printf("%s,",p->name);
p=p->next;
}
while(p!=NULL);
}

main()
{creat();
dis(head);
return 0;
}

[此贴子已经被作者于2006-11-5 16:42:36编辑过]

搜索更多相关主题的帖子: 链表 
2006-11-05 00:21
siyuan_gc
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-11-5
收藏
得分:0 
没人理我啊
自己先顶起来
看了坛子的链表贴
想了解自己的思路有啥问题
实在想不出自己编的有啥问题,
才发了此帖
希望过路的大大帮帮忙哦
2006-11-05 16:38
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
/*试一下这个*/
struct stu *head;
void *creat()
{
struct stu *p;
int n;
int num;
printf("请输入链表的结点个数:num=");
scanf("%d",&num);
printf("这是一个含有%d个结点的链表\n",num);
printf("请输入链表结点:name=\n");
head=(struct stu *)malloc(LEN);
head->next=NULL;
scanf("%s,",&(head->name));
for(n=0;n<num-1;n++)
{
p=(struct stu *)malloc(LEN);
scanf("%s,",&(p->name));
p->next=head->next; //头插法
head->next=p;
}
}

倚天照海花无数,流水高山心自知。
2006-11-05 16:49
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
/*改成这个,刚才没有注意,最好不要在scanf()里写些不必要的字符*/
scanf("%s",&(head->name));
for(n=0;n<num-1;n++)
{
p=(struct stu *)malloc(LEN);
scanf("%s",&(p->name));
p->next=head->next; //头插法
head->next=p;
}

倚天照海花无数,流水高山心自知。
2006-11-05 16:52
baxia
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2006-3-10
收藏
得分:0 

你试试看我的程序。结构体合你的不一样 希望对你有启发
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct node
{
long num;
float score;
node *next;
};

node * creat(void);
void print(node *head);
void main(void)
{
print(creat());
}

node * creat(void)
{
int n=0;
node *head, *p1,*p2;
printf("num score\n");
p1=p2=(struct node *)malloc(sizeof(node));
scanf("%ld,%f",&p1->num,&p1->score);
head=NULL;
while(p1->num!=0)
{
n=n+1;
if(n==1) head=p1;
else p2->next=p1;
p2=p1;
p1=(node *)malloc(sizeof(node));
scanf("%ld,%f",&p1->num,&p1->score);
}
p2->next=NULL;
free(p1);
return(head);
}
void print(node *head)
{
node *p;
if (head==NULL) printf("NULL!\n");
else{
printf("\nNow,These records are:\n");
p=head;
while(p!=NULL)
{
printf("%ld\t%5.1f\n",p->num,p->score);
p=p->next;
}
}
}

2006-11-05 17:05
siyuan_gc
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-11-5
收藏
得分:0 
以下是引用nuciewth在2006-11-5 16:52:10的发言:
/*改成这个,刚才没有注意,最好不要在scanf()里写些不必要的字符*/
scanf("%s",&(head->name));
for(n=0;n<num-1;n++)
{
p=(struct stu *)malloc(LEN);
scanf("%s",&(p->name));
p->next=head->next; //头插法
head->next=p;
}

多谢大大解答,但用此程序段好像还是有问题:
比如我输入num=3(有三个结点),并依次输入结点元素,
但运行时显示只有头和尾结点,中间结点丢失啊!

2006-11-05 17:34
siyuan_gc
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-11-5
收藏
得分:0 
以下是引用baxia在2006-11-5 17:05:25的发言:

你试试看我的程序。结构体合你的不一样 希望对你有启发
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct node
{
long num;
float score;
node *next;
};

node * creat(void);
void print(node *head);
void main(void)
{
print(creat());
}

node * creat(void)
{
int n=0;
node *head, *p1,*p2;
printf("num score\n");
p1=p2=(struct node *)malloc(sizeof(node));
scanf("%ld,%f",&p1->num,&p1->score);
head=NULL;
while(p1->num!=0)
{
n=n+1;
if(n==1) head=p1;
else p2->next=p1;
p2=p1;
p1=(node *)malloc(sizeof(node));
scanf("%ld,%f",&p1->num,&p1->score);
}
p2->next=NULL;
free(p1);
return(head);
}
void print(node *head)
{
node *p;
if (head==NULL) printf("NULL!\n");
else{
printf("\nNow,These records are:\n");
p=head;
while(p!=NULL)
{
printf("%ld\t%5.1f\n",p->num,p->score);
p=p->next;
}
}
}

看了兄弟的程序,但我想在链表创建的时候就少用一个指针变量(您用了*head, *p1,*p2,和我看的教程上的相似;我想只用*head,*p)所以才自己写了这个程序,不知哪里出了问题哦,想不同郁闷!

2006-11-05 17:37
C语言学习者
Rank: 4
等 级:贵宾
威 望:13
帖 子:1278
专家分:0
注 册:2006-9-26
收藏
得分:0 

小心野指针.


谁有强殖装甲第二部,可以Q我460054868
2006-11-05 17:37
siyuan_gc
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-11-5
收藏
得分:0 
以下是引用C语言学习者在2006-11-5 17:37:40的发言:

小心野指针.

兄弟明示啊!不懂哦

2006-11-05 17:39
C语言学习者
Rank: 4
等 级:贵宾
威 望:13
帖 子:1278
专家分:0
注 册:2006-9-26
收藏
得分:0 
未经赋值的指针,而你去使用它,这是很危险.

谁有强殖装甲第二部,可以Q我460054868
2006-11-05 17:46
快速回复:[求助]程序执行异常!!菜鸟问题-链表的创建及显示问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024084 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved