#include<stdio.h>
#include<malloc.h>
#include <conio.h>
/**************************************************************/
struct student
{
int num;
struct student *next;
};
/************************创建链表****************************/
struct student *create()
{
struct student *head;
head=(struct student *)malloc(sizeof(struct student));
head->next=NULL;
return head;
}
/************************录入数据******************************/
void Input(struct student *h)
{
struct student *p,*q;
p=h;
while(1)
{
q=(struct student *)malloc(sizeof(struct student));
printf("请输入学生学号:");
scanf("%d",&p->num);
q->next=NULL;
p->next=q;
p=q;
int ch;
printf("要继续输入下一个吗(y/n)\n");ch=getch();
if(ch=='y'||ch=='Y')
{
}
else
{
free(q);
break;
}
}
}
/************************显示链表******************************/
void Disp(struct student *h)
{
printf("\n\n");
struct student *p=h;
while(p->next!=NULL)
{
printf("学号为:%d\n",p->num);
p=p->next;
}
}
/***************************************************************/
void main()
{
struct student *h;
h=create();
Input(h);
Disp(h);
}
/***************************************************************/
[此贴子已经被作者于2007-7-22 23:11:53编辑过]
----------------解决方案--------------------------------------------------------
有什么错误提示?
----------------解决方案--------------------------------------------------------
最后一个是乱码~~
----------------解决方案--------------------------------------------------------
我都测试过,可是没发现问题啊~~
----------------解决方案--------------------------------------------------------
int ch;
printf("要继续输入下一个吗(y/n)\n");ch=getch();
if(ch=='y'||ch=='Y')
{
}
else
{
free(q);
break;
}
主要是加了这段,如果换了就可以.......
----------------解决方案--------------------------------------------------------
这段看不出那里有错误~~
我刚才又测试了一下,没有发现问题!
----------------解决方案--------------------------------------------------------
不是吧,你调试没问题???我用的是vc++ 6.0
像这样
请输入学生学号:21
要继续输入下一个吗(y/n)n
学号为:21
学号为:-572662307
就这样......................为什么啊?????????
[此贴子已经被作者于2007-7-22 23:11:32编辑过]
----------------解决方案--------------------------------------------------------
晕~~我还在用TC呢...
不过程序应该不会有问题啊
----------------解决方案--------------------------------------------------------
我知道问题在那了
是free(q)............
----------------解决方案--------------------------------------------------------
修改了,不知是不是你想要的结果?
代码:
#include<stdio.h>
#include<malloc.h>
#include <conio.h>
/**************************************************************/
struct student
{
int num;
struct student *next;
};
/************************创建链表****************************/
struct student *create()
{
struct student *head;
head=(struct student *)malloc(sizeof(struct student));
head->next=NULL;
return head;
}
/************************录入数据******************************/
void Input(struct student *h)
{
struct student *p,*q;
int ch;
p=h;
printf("请输入学生学号:");
scanf("%d",&p->num);
while(1)
{
printf("要继续输入下一个吗(y/n)\n");
ch=getch();
if(ch=='y'||ch=='Y')
{
q=(struct student *)malloc(sizeof(struct student));
printf("请输入学生学号:");
scanf("%d",&q->num);
q->next=NULL;
p->next=q;
p=q;
}
else
{
break;
}
}
}
/************************显示链表******************************/
void Disp(struct student *h)
{
struct student *p;
//printf("\n\n");
p=h;
while(p!=NULL)
{
printf("学号为:%d\n",p->num);
p=p->next;
}
}
/********************释放链表*****************************/
void Free_link(struct student *h)
{
struct student *p;
do
{
p=h->next;
free(h);
h=p;
}while(h!=NULL);
}
/***************************************************************/
void main()
{
struct student *h;
h=create();
Input(h);
Disp(h);
Free_link(h);
}
/***************************************************************/
----------------解决方案--------------------------------------------------------