懂C的朋友看一下
建立一个有若干名学生数据(学号,成绩)的单向动态链表备注:输入学号为0时,表示输入完毕。
C代码如下:
# include <malloc.h>
# define NULL 0 /* 用NULL等于0表示空地址 */
# define LEN sizeof(struct student) /* 用LEN代表结构体类型数据的长度 */
struct student /* 定义结构体 */
{long num;
float score; /* 此处用int定义变量score,结果正确,但用float定义,当输入时,会出现错误 */
struct student *next;
};
int n;
struct student *creat(void) /* 定义一个指针函数 */
{struct student *head;
struct student *p1,*p2;
n=0;
p1=p2=(struct student *)malloc(LEN); /* 开辟链表的第一个新结点,使p1p1指向它 */
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=(struct student *)malloc(LEN); /* 再开辟一个新结点,使p1指向它 */
scanf("%ld,%lf",&p1->num,&p1->score);
}
p2->next=NULL; /* 链表尾结点的指针变量置NULL */
return head;
} /* 函数返回链表的首地址 */
void print(struct student *head)
{struct student *p; /* 函数功能:输出链表 */
printf("\nNow,These %d records are:\n",n);
p=head;
if(head!=NULL)
do
{printf("%ld,%lf\n",p->num,p->score);
p=p->next;
}
while(p!=NULL);
}
main()
{struct student *p;
p=creat();
print(p);
}
当结构体类型的score用int 定义时,程序可以正常运行。
但当用float定义时,当输入第一个学号分数(101,89)时,显示如下信息(在turboc2.0上运行):
scanf:floating point formats not linked abnormal program termination
清楚的说一下。