回 帖 发 新 帖 刷新版面

主题:请教,编译通过,但运行不了的问题!

//用学生的学号,分数的结构体,进行对链表的操作


#include<stdio.h>
#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;
  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);
};

//输出链表函数print
void print(struct student * head)
{
  struct student * p;
  printf("\nNow,These %d records are:\n",n);
  p=head;
  if(head!=NULL)
     do
      {
        printf("%ld,%f\n",p->num,p->score);
        p=p->next;
      }
    while(p!=NULL);
};


//删除结点函数del
struct student *del(struct student * head,long num)
{
  struct student *p1,*p2;
  if(head==NULL)
     {
      printf("\nlist null!\n");
      return head;
    }      
   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 found!\n",num);
     return(head);
};

//插入结点函数insert
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,*stu;
  long del_num;
  printf("input records:\n");
  head=creat();
  print(head);
  printf("\ninput the deleted number:");
  scanf("%ld",&del_num);
  while(del_num!=0);
     {
       head=del(head,del_num);
       print(head);
       printf("\ninput the deleted number:");
       scanf("%ld",&del_num);
    }    
  printf("\ninput the insert records:");
  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 record:");
       stu=(struct student *)malloc(LEN);
        scanf("%ld,%f",&stu->num,&stu->score);
    }
}

回复列表 (共3个回复)

沙发

你把你main函数-135行-while(del_num!=0)后的那个分号去掉!!!该惩罚自己一下了,手误的真是地方。
while(del_num){......}即可。

板凳

不好意思哈,但改了之后,还是运行不了,我用的是Turbo C++3.0编译器,什么原因呢?

3 楼

你为啥非要用tc3.0呢? 那么多可以用的,不明白非要用这个的原因。如是是因为DOS的的话,我宁可用bc31。代码我跑了,没啥大问题,除了写的比较菜,至少运行可以。另外,代码不是你写的吧?你可能就没弄懂写的是啥意思。

我来回复

您尚未登录,请登录后再回复。点此登录或注册