这个循环哪里出错了呢??????
以下是一个创建链表的程序,根据输入创建节点个数,在创建节点的lkk*creat(int n)中循环出错了,一直想不明白是哪里错了??????#include<stdio.h>
struct lk
{
char name[20];
int age;
char sex;
struct lk*next;
};
typedef struct lk lkk;
void print(lkk*head)
{
if(head==0)
{
printf("no data\n");
getch();
exit(0);
}
while(head!=0)
{
printf("%s\t%d\t%c\n",head->name,head->age,head->sex);
head=head->next;
}
}
lkk*creat(int n)
{
lkk*head,*p,*q;
int i;
p=(lkk*)malloc(sizeof(lkk));
if(p==0)
{
printf("error\n");
getch();
exit(0);
}
head=p;
printf("input the 1 stdunt date\n");
do
{
printf("name:");
scanf("%s",p->name);
i=strlen(p->name);
if(i>19)
printf("too long\n");
}while(i>19);
do
{
fflush(stdin);
printf("age:");
scanf("%d",&p->age);
if(p->age<0)
printf("error\n");
}while(p->age<0);
do
{
printf("sex: b for boy g for gile\n");
while(getchar()!='\n')
;
scanf("%c",&p->sex);
if(p->sex!='b'&&p->sex!='g')
printf("input error\n");
}while(p->sex!='b'&&p->sex!='g');
p->next=0;
for(i=1;i<n;i++)
{
if(n==1)
break;
q=(lkk*)malloc(sizeof(lkk));
if(q==0)
{
printf("error error\n");
getch();
exit(0);
}
p->next=q;
printf("input the %d stdunt date\n",i+1);
do
{
printf("name:");
scanf("%s",q->name);
i=strlen(q->name);
if(i>19)
printf("too long\n");
}while(i>19);
do
{
printf("age:");
scanf("%d",&q->age);
if(q->age<0)
printf("error\n");
}while(q->age<0);
do
{
getchar();
printf("sex: b for boy g for gile\n");
scanf("%c",&q->sex);
if(q->sex!='b'&&q->sex!='g')
printf("input error\n");
}while(q->sex!='b'&&q->sex!='g');
q->next=0;
p=q;
}
return(head);
}
main()
{
lkk*head;
int i;
printf("input numbers\n");
scanf("%d",&i);
head=creat(i);
print(head);
getch();
}
能不能给仔细讲讲,多谢!!