标题:新手求教c语言链表程序!编译通过但是运行不出来!谢谢啦
取消只看楼主
jokerzhou
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-9-9
 问题点数:0 回复次数:3 
新手求教c语言链表程序!编译通过但是运行不出来!谢谢啦
各位大神们,小妹乃大二学生,现有一链表程序编成后实在找不出错误,但一直出现联机解决的框框,晚上就要交~
求解哇!初来乍到,没有分,望谅解,如能回答,小妹感激不尽请大家多多指教~
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
#define  NULL 0
#define  LEN sizeof(struct person)
  struct person
  { char num[3];
  char name[8];
  char age[2];
  char tele[11];
  char addr[20];
  char email[20];
  struct person *next;
};                      //建立结构体//
  int n;
  struct person *head;

  
  struct person *creat(void)   //录入信息,生成链表的函数//
  {
    head=NULL;
    struct person *p,*q;
    int flag=1,n=0;
    while(flag==1)
    {  p=(struct person *)malloc(LEN);
       n++;
       printf("请输入成员编号:");
       scanf("%s",p->num);
       printf("请输入成员姓名:");
       scanf("%s",p->name);
       printf("请输入成员年龄:");
       scanf("%s",p->age);
       printf("请输入成员电话:");
       scanf("%s",p->tele);
       printf("请输入成员地址:");
       scanf("%s",p->addr);
       printf("请输入成员邮箱:");
       scanf("%s",p->email);
          if(n==1)
          q=head=p;
          else
          {q->next=p;
          q=p;}
     printf("继续录入输入1,否则输入0:");
    scanf("%d",&flag);
    }
   return(head);
  }

   
void print(struct person *t) //以表格方式打印链表的函数//
  {
     
       printf("|—————————————————通讯录—————————————————|\n");
       printf("|  编号  |   姓名   | 年龄 |   电话   |       地址      |      邮箱      |\n");  
     do
       {printf(" %8s %10s %6s %10s %17s %16s",t->num, t->name, t->age, t->tele,
   t->addr, t->email);
       t=t->next;
       }while(t!=NULL);
       printf("|—————————————————————————————————————|\n");

  }

 
  struct person *insert(struct person * t) //增加记录的函数//
{
   struct person *p,*a;
     a=(struct person*)malloc(sizeof(struct person));
     printf("请输入成员编号:");
     scanf("%s",a->num);
     printf("请输入成员姓名:");
     scanf("%s",a->name);
     printf("请输入成员年龄:");
     scanf("%s",a->age);
     printf("请输入成员电话:");
     scanf("%s",a->tele);
     printf("请输入成员地址:");
     scanf("%s",a->addr);
     printf("请输入成员邮箱:");
     scanf("%s",a->email);
  if(t==NULL)//若链表为空,则建立一个结点的链表//
  {t=a;
   p=a;
   p->next=NULL;
  }
  else//链表不为空
  { p=t;
    while(p->next!=NULL)p=p->next;//查找链表最后一个结点//
        a->next=NULL;   
        p->next=a; // a的next不指向任何地址,而p的next指向a,使a成为链表最后一个结点//
     }
     return t;
 }


  struct person * delect(struct person *t) // 删除记录 //
{   int m=0;
    char name[10];
    struct person *p=t,*q;
    printf("请输入需要删除的姓名:");
    scanf("%s",name);
    for(;p!=NULL;q=p,p=p->next)
      if(strcmp(p->name,name)==0)  //比较两个字符串的大小,相同则将跳出循环//
      {   m++;
          break;
      }
    if(p==t)
     t=t->next;
    else
    {
      q->next =p->next ;
      free(p);
    }
    if(m==0)
       printf("对不起,删除失败.\n");
    else
       printf("删除成功!\n");
  return t;
}

  
  void nameseek(struct person *t) // 按人名查找显示记录//
{      int m=0;
       struct person *p=t;
       char name[10];
       printf("请输入需要查找的姓名:");  
       scanf("%s",name);
       for(;p!=NULL;p=p->next)  
       {
           if(strcmp(p->name,name)==0)  //比较两个字符串的大小,相同则将跳出循环//
           {  m++;
              printf("序号\t姓名\t年龄\t电话\t地址\temail\n");
                    printf("%s\t%s\t%d\t%s\t%s\t%s\n",p->num,p->name,p->age,p->tele,p->addr,p->email);
              break;
           }
       }
       if(m==0)
           printf("对不起,您要查找的内容不存在!\n");
}

  
  
  void  teleseek(struct person *t) // 按电话号码查找显示记录//
{      int n=0;
       struct person *p=t;
       char  tele[12];
       printf("请输入需要查找的电话:");
       scanf("%s",tele);
       for(;p!=NULL;p=p->next)
          {   
                  if(strcmp(p->tele,tele)==0)  //比较两个字符串的大小,相同则将跳出循环//
                  { n++;
                    printf("序号\t姓名\t年龄\t电话\t地址\temail\n");
                    printf("%s\t%s\t%d\t%s\t%s\t%s\n",p->num,p->name,p->age,p->tele,p->addr,p->email);
                    break;
                  }
          }
        if(n==0)
           printf("对不起,您要查找的内容不存在!\n");
}


  
  void  modify(struct person *t)// 修改记录//
{   
      struct person *p=t;
      int c,a=0;
      char name[10];
      printf("请输入需要修改的记录的姓名:");
      scanf("%s",name);
      for(;p!=NULL;p=p->next)
       {
           if(!strcmp(p->name,name)) //比较两个字符串的大小,相同则将跳出循环//
                       {  a++;
                          break;
                        }
       }
      if(a==0)
         {printf("要修改的记录不存在.\n");
          return;
         }
       while(1)
       {
         printf("\n8修改序号  9修改姓名  10修改年龄  11修改电话  12修改地址  13修改邮编  14退出修改:\n");
         printf("请选择需要修改的内容:");
         scanf("%d",&c);
         switch(c)
         {  case 8:
               printf("\n请输入修改后的序号:");
               scanf("%s",p->num);
               break;
            case 9:
               printf("\n请输入修改后的姓名:");
               scanf("%s",p->name);
               break;
            case  10:
               printf("\n请输入修改后的年龄:");
               scanf("%s",p->age);
               break;
            case 11:
               printf("\n请输入修改后的电话:");
               scanf("%s",p->tele);
               break;
            case 12:
               printf("\n请输入修改后的地址 :");
               scanf("%s",p->addr);
               break;
            case 13:
                printf("\n请输入修改后的email:");
                scanf("%s",p->email);
                break;
            case 14:
                printf("修改完毕!\n");
                break;

            default:
                break;
         }
       }      
}


void save(struct person *t)// 保存为文件//
{   struct person *p=t;
    FILE *fp;
    if((fp=fopen("contact.dat","wb"))==NULL)
        {printf("无法打开此文件\n");
                 return;
                }

    else
        while(p!=NULL)
            { fwrite(p,sizeof(struct  person),1,fp);
              p=p->next;
            }
   
    printf("文件已保存!\n");
    fclose(fp);
}



void main()  //主功能函数//
{struct person *k=NULL;
int key;
while(1)
{printf("||******************欢迎使用通讯录管理系统*****************||\n");
 printf("||**********************系统功能菜单**********************||\n");
 printf("||———————————————————————————||\n");
 printf("||———————————————————————————||\n");
        printf("\t1.录入信息\t\n");
        printf("|---------------------------|\n");
        printf("\t2.以表格方式排列\t\n");
        printf("|---------------------------|\n");
        printf("\t3.增加记录\t\n");
        printf("|---------------------------|\n");
        printf("\t4.删除记录\t\n");
        printf("|---------------------------|\n");
        printf("\t5.按姓名查找\t\n");
        printf("|---------------------------|\n");
        printf("\t6.按电话查找\t\n");
        printf("|---------------------------|\n");
        printf("\t7.修改记录\t\n");
        printf("|---------------------------|\n");
        printf("\t8.保存文件\t\n");
        printf("|---------------------------|\n");
        printf("\t0.退出\t\n");
        printf("|---------------------------|\n");
        printf("\t请输入服务序号:");
scanf("%d",&key);
            switch(key)
            {  case 1:k=creat();break;
               case 2:print(k);break;
               case 3:k=insert(k);break;
               case 4:k=delect(k);break;
               case 5:nameseek(k);break;
               case 6:teleseek(k);break;
               case 7:modify(k);break;
               case 8:save(k);break;
               case 0:printf("谢谢使用");break;
               default:break;
            }
            
  }
}  
搜索更多相关主题的帖子: person 链表程序 include next c语言 
2012-09-09 10:53
jokerzhou
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-9-9
得分:0 
回复 2楼 阿鞠尼
主要是运行的问题

。。。。。。总是运行不了
2012-09-09 12:34
jokerzhou
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-9-9
得分:0 
回复 10楼 zhu224039
木有抄书啊大哥,我看了书的。我是把书上的看懂然后在自己编。但是关于非法内存的问题我搞不懂就是。还有creat函数最后已经返回了头指针,用insert也是k=insert(k),也就是传进去的是头指针。
文件什么的没怎么看,也没怎么写。。。。。。
2012-09-09 14:42
jokerzhou
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-9-9
得分:0 
回复 17楼 zhu224039
好的 不过我应该比你小吧。。。。。。。

阿里嘎多果赞以马斯~
  
真心感谢~
2012-09-09 14:53



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-381011-1-1.html




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

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