学.....佛......有恒
大家帮我看看啊.我这个只是按照谭浩强的<C程序设计>第二版后面(我们的教材呀)的链表练习的原代码写的一个小程序(书上的原代码啊),想漫漫的练习一下啊.可是,我写了之后却不能运行. 希望大家给我看看是哪里的问题啊....程序如下: #include<malloc.h> #define NULL 0 #define LEN sizeof(struct student)
struct student {long num; float score; struct student * next; }; int n;
struct student * creat(void)/*定义函数增加,返回一个带指向链表头的指针*/ {struct student * head,* p1,*p2; n=0; p1=p2=(struct student *)malloc(LEN);/*开辟一个新单元*/ 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); scanf("%ld,%f",&p1->num,&p1->score); } p2->next=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,%5.1f\n",p->num,p->score); p=p->next; }while(p!=NULL); }
struct student * del(struct student * head,long num)/*此函数是删除一个接点*/ {struct student * p1,* p2; if(head==NULL){printf("\nList null!!\n"); }/*这个end到底是怎么回师?*/ p1=head; while(num!=p1->num && p1->next!=NULL) {p2=p1;p1=p1->next; }/*p1向后移动一个接点*/
if(num==p1->num)/*找到了*/ {if(p1==head) head=p1->next;/*p1指向的是第一个接点,把第二个接点地址赋给head*/ else p2->next=p1->next;/*否则把下一个地址赋给前一个地址*/ printf("delete:%ld\n",num); n=n-1; } else printf("%ld not been found!!\n",num);/*输出找不到该接点*/ return(head); }
struct student * insert(struct student * head,struct student * stud)/*此函数的作用是插入一个结点*/ {struct student * p0,* p1,* p2; p1=head; /*使p1指向第一个接点*/ p0=stud; /*p0指向要插入的接点*/ if(head==NULL) {head=p0;p0->next=NULL;}/*使p0指向的接点作为头接点*/ else {while((p0->num>p1->num)&&(p1->next!=NULL)) {p2=p1; /*使p2指向刚才p1指向的结点*/ p1=p1->next; } /*p1后移一个结点*/ if(p0->num<p1->num) {if(head==p1) head=p0;/*插入到原来的第一个结点之前*/ else p2->next=p0; /*插入到p2指向的结点之后*/ p0->next=p1; } else{p1->next=p0;p0->next=NULL;}/*插入到最后的结点之后*/ } n=n+1; return(head); }
main() {struct student * head,* stu; long del_num; printf("input records: \n"); head=creat();/*调用creat函数*/ print(head);/*调用print函数*/ printf("\ninput the deleted number:"); scanf("%ld",&del_num); while(del_num!=0) {head=del(head,del_num); print(head); printf("input the deleted number:"); scanf("%ld",&del_num); } printf("\ninput the inserted record:"); stu=(struct student *)malloc(LEN); scanf("%ld,%f",&stu->num,&stu->score); while(stu->num!=0) {head=insert(head,stu); print(head); printf("input the inserted record:"); stu=(struct student * )malloc(LEN); scanf("%ld,%f",&stu->num,&stu->score); } }
编译是通过了.可是当我输入第一个数据的时候:99101,99 按回车之后就出错了,显示:scanf : floating point formats not linked Abnormal program termination 请问各位大哥哥,这是什么错误啊???我应该怎么做啊??这个我不是要做作业拉。。。你们要回答我哦。。。