| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 350 人关注过本帖
标题:关于链表 的小程序 在VC下成功 但在TC下失败,请教
只看楼主 加入收藏
清风徐来
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2009-10-5
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
关于链表 的小程序 在VC下成功 但在TC下失败,请教
   下面是关于指针链表的建立,删除,插入与输出,程序逻辑没什么问题,在VC上能运行而且能成功输出,但在TC和BC上都是运行到“插入”时,输入数据后,运行的程序自动跳出,如果我把主函数改为能删除多个与插入多个的情况的话,在VC上也能运行且成功输出,但在BC与TC上都是输入第一个数据就自动跳出。请高手帮忙看下,不胜感激!
#include<stdio.h>
#include<malloc.h>
#define NULL 0
#define LEN sizeof(struct student)
#include<conio.h>
 
struct student
{long num;
 float score;
 struct student *next;
};
int n;
 
struct student *creat(void)
{struct student *head;
 struct student *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 record 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");} //goto end;}
 p1=head;
 while(num!=p1->num&&p1->next!=NULL)
 {p2=p1;p1=p1->next;}
  if(num==p1->num)
  {if(p1==head) head=p1->next;
   else p2->next=p1->next;
   printf("delete:%ld\n",num);
   n=n-1;
  }
 else printf("%ld not been fond\n",num);
 return(head);
}
 
struct student * insert(struct student * head,struct student * stud)
{struct student * p0,* p1,* p2;
 p1=head;
 p0=stud;
 if(head==NULL)
 {head=p0;p0->next=NULL;}
 else
 {while((p0->num>p1->num)&&(p1->next!=NULL))
   {p2=p1;
    p1=p1->next;
   }
   if(p0->num<=p1->num)
     {
      if(head==p1) { head=p0;}
      else
      { p2->next=p0;
        p0->next=p1;
      }
     }
    else
    {
     p1->next=p0;
     p0->next=NULL;
    }
 }
 n=n+1;
 return(head);
}
 
void main()
{
 struct student * head;
 struct student  stu;
 long del_num;
 clrscr();
 printf("input records:\n");
 head=creat();
 print(head);
 printf("\ninput the deleted num:");
 scanf("%ld",&del_num);
 head=del(head,del_num);
 print(head);
 printf("\ninput the insert record:");
 stu=(struct student * )malloc(LEN);
 scanf("%ld,%f",&stu.num,&stu.score);
 head=insert(head,&stu);
 print(head);
}



[ 本帖最后由 清风徐来 于 2009-10-5 10:33 编辑 ]
搜索更多相关主题的帖子: 失败 链表 
2009-10-05 10:11
chenaiyuxue
Rank: 5Rank: 5
来 自:山东滨州
等 级:职业侠客
帖 子:334
专家分:370
注 册:2008-5-20
收藏
得分:20 
主函数中stu=(struct student * )malloc(LEN); 错。stu为struct student,而malloc返回的是一个struct student*指针。可以这样改一下:
struct student *stu;
...
printf("\ninput the insert record:");
stu=(struct student * )malloc(LEN);
scanf("%ld,%f",&stu->num,&stu->score);
head=insert(head,stu);
print(head);


你是雪,我是尘埃,相遇是意外;你坠落,在我胸怀,流进我血脉。
2009-10-05 11:13
chenfeng201
Rank: 2
等 级:论坛游民
帖 子:11
专家分:31
注 册:2009-10-5
收藏
得分:0 
我这边也在学指针链表这一块,呵呵,我也遇到问题了……
2009-10-05 12:57
快速回复:关于链表 的小程序 在VC下成功 但在TC下失败,请教
数据加载中...
 
   



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

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