标题:通讯录问题执行到一半停止工作帮忙看看什么问题?
只看楼主
cyuyan793445
Rank: 1
来 自:江门五邑大学
等 级:新手上路
帖 子:20
专家分:0
注 册:2013-1-12
结帖率:100%
已结贴  问题点数:15 回复次数:9 
通讯录问题执行到一半停止工作帮忙看看什么问题?
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int n=4;
struct person
{

    int number;
  char name[10];
  char sex;
  int telephone;
  int QQ;
  int hometele; //家庭电话
  char email;
  char address[30]; //通讯地址
  struct 
  {
    unsigned short year;
    unsigned short month;
    unsigned short day;
  } birthday;   //出生日期
  struct person*last;

 struct person*next;
};

 struct person*head=NULL;

 struct person*p;

 int k;
  void create(struct person*head)
  {
  
   int i=0;
   p=(person*)malloc(sizeof(struct person));
   if(p=NULL)
   {
     printf("申请内存不成功!");
     free(p);
     return ;
   }
  
  else
  {  printf("\n\n======================================================================\n\n");
      printf("\t\t请输入以下信息:");
  for(i=1;i<n;i++)
  {
   printf("\n\t\t第%d位同学的姓名:",i);
   scanf("%s",&(p->name)); 
   printf("\t\t第%d位同学的性别:",i);
   scanf("%s",&(p->sex));
   printf("\t\t第%d位同学的电话号码:",i);
   scanf("%d",&(p->telephone));
  printf("\t\t第%d位同学的QQ:",i);
  scanf("%d",&(p->QQ));
  printf("\t\t第%d同学的家庭号码:",i);
  scanf("%d",&(p->hometele));
  printf("\t\t第%d位同学的电子邮件:",i);
  scanf("%s",&(p->address));
  printf("\t\t第%d位同学的出生日期:",i);
  scanf("%d/%d/%d",&(p->birthday.year),&(p->birthday.month),&(p->birthday.day));
  p=p->next;
  }
   p->next=NULL;
   printf("\n\n===========================================");
   printf("\n\n\t\t信息记录保存成功!");
  return ;
  
  }

  }




  void print(struct person*head)
  {
      printf("\n\n\t\t%-9s%-9s%-9s%-9s%-9s%-9s%-9s%-9s%-9s\n","学号","姓名","性别","电话号码","QQ号码","家庭电话","电子邮件","通讯地址","出生日期");
   if(p!=NULL)
   {
       
    printf("\t\t%d\t\t\t %-6s%-3s",p->number,p->name,p->sex);
    printf("\t\t%d\t\t\t%d\t\t\t%d",p->telephone,p->QQ,p->hometele);
    printf("%-9s%-9s",p->email,p->address);
    printf("\t\t%d/%d/%d\n",p->birthday.year,p->birthday.month,p->birthday.day);
    p=p->next;
   }
   
   else
   {
       printf("\n\n\t\t目前此通讯录无任何记录!按任意键返回主菜单···");
       scanf("%",&k);
       return ;
   }
  }
       
  //查找信息
    void seek(struct person*head)
  {
    char name[10];
    if(p==NULL)
    { printf("\n\n\t\t此通讯录暂无任何信息!按任意键返回主菜单···");
      scanf("%d",&k);
    }
    else
      {    printf("\t\t请输入需查找的人名:");
          scanf("%s",&name);
         while(p!=NULL)
        {  
            if(strcmp(p->name,name)==0)
            { 
              printf("\n\n\t\t%s的信息如下:",&name);
              printf("\n=======================================================================================================");
              printf("\n\n\t\t%-9s%-9s%-9s%-9s%-9s%-9s%-9s%-9s%-9s\n","学号","姓名","性别","电话号码","QQ号码","家庭电话","电子邮件","通讯地址","出生日期");
              printf("\t\t%d\t\t\t %-6s%-3s",p->number,p->name,p->sex);
              printf("\t\t%d\t\t\t%d\t\t\t%d",p->telephone,p->QQ,p->hometele);
              printf("%-9s%-9s",p->email,p->address);
              printf("\t\t%d/%d/%d\n",p->birthday.year,p->birthday.month,p->birthday.day);  
            

              printf("\t\t请按任意键返回主菜单····\n");
              scanf("%d",&k);
              return ;

            }
        p=p->next;
        
        }
       printf("\n\n\t\t你所输入的姓名有误或不存在!请按任意键返回主菜单····");
       scanf("%d",&k);
       return ;
    }
  

 }




//添加信息
    void add(struct person*head)
    {
     struct person*h;  //追加的节点
     struct person*f; //中间变量

     h=(struct person*)malloc(sizeof(struct person));
     if(p==NULL) //需创建链表
     { 
         p=h;
         p->next=NULL;
         head->next=p;
     }
     else //说明需找到链表结束位置
     {
       
       f=p;
       while(f->next!=NULL)
       {
         f=f->next;
       }
      f->next=h;
      h->last=f;
      h->next=NULL;

     }

     printf("\t\t请输入学号:");
     scanf("%d",h->number);
     printf("\t\t请输入姓名:");
     gets(h->name);
     printf("\t\t请输入性别:");
     scanf("%s",&(h->sex));
     printf("\t\t请输入电话号码:");
     scanf("%d",&(h->telephone));
     printf("\t\t请输入QQ号:");
     scanf("%d",&(h->QQ));
     printf("\t\t请输入家庭电话:");
     scanf("%d",&(h->hometele));
     printf("\t\t请输入电子邮件:");
     scanf("%s",&(h->email));
     printf("\t\t请输入通讯地址:");
     gets(h->address);



     printf("\t\t添加成功!按任意键返回主菜单···");
     scanf("%d",&k);
     return ;
    
    }


 //删除信息
    void dele(struct person*p)
{
    char name[10];
    char d;
    if(p==NULL)
        {    printf("\n\n\t\t通讯录目前无任何信息,无法执行删除!按任意键返回主菜单···");
            scanf("%d",&k);
            return ;
        }
        else
        {
          printf("请输入需删除信息的人名:");
          scanf("%s",&name);
          if(strcmp(p->name,name)==0)
          {
           printf("\n\t\t你确定要删除%s的信息(y/n)?",p->name);
          d=getchar();
          if(d=='N'||d=='n')
          {
              printf("\n\t\t你选择了取消删除,请按任意键返回主菜单···");
          scanf("%d",&k);
          return ;
          }
        else  //确认删除

        {   //重建链表关系
          (p->last)->next=p->next;
          (p->next)->last=p->last;
        
        }
        free(p);
        printf("\n\t\t信息删除成功!按任意键返回主菜单···");
        scanf("%d",&k);
        return ;
        
        
        }
         
    p=p->next;
    
    }
  
}


    //修改信息

    void modify(struct person*head)
    {
      char name[10];
      int m;
      printf("\n\t\t请输入需修改信息的人名字:");
      scanf("%s",&name);
      while(p!=NULL)
      {
       if(strcmp(p->name,name)==0)
       {

        printf("\n\n\t\t%-9s%-9s%-9s%-9s%-9s%-9s%-9s%-9s%-9s\n","学号","姓名","性别","电话号码","QQ号码","家庭电话","电子邮件","通讯地址","出生日期");
        printf("\t\t%d\t\t\t %-6s%-3s",p->number,p->name,p->sex);
        printf("\t\t%d\t\t\t%d\t\t\t%d",p->telephone,p->QQ,p->hometele);
        printf("%-9s%-9s",p->email,p->address);
        printf("\t\t%d/%d/%d\n",p->birthday.year,p->birthday.month,p->birthday.day); 

        printf("\n\n\t\t请选择需修改的信息项:");
        printf("\n\t\ta----学号");
        printf("\n\t\tb----性别");
        printf("\n\t\tc----电话号码");
        printf("\n\t\td----QQ号码");
        printf("\n\t\te----家庭电话");
        printf("\n\t\tf----电子邮件");
        printf("\n\t\tg----通讯地址");
        printf("\nt\\th----出生日期");
        

        printf("\t\t请选择:");
        m=getchar();

        switch(m)
        {
        
        case 'a':printf("\n\t\t请输入新的学号:");
                 scanf("%d",&(p->number));break;
        case 'b':printf("\n\t\t请输入新的性别:");
                 scanf("%s",&(p->sex));break; 
        case 'c':printf("\n\t\t请输入新的电话号码:");
                 scanf("%d",&(p->telephone));break;
        case 'd':printf("\n\t\t请输入新的QQ号码:");
                 scanf("%d",&(p->QQ));break;
        case 'e':printf("\n\t\t请输入新的家庭电话:");
                 scanf("%d",&(p->hometele));break;
        case 'f':printf("\n\t\t请输入新的电子邮件:");
                 scanf("%s",&(p->email));break;
        case 'g':printf("\n\t\t请输入新的通讯地址:");
                 scanf("%s",&(p->address));break;
        default :printf("\n\t\t选择错误,请重新选择:");
                  getchar();
        
        }
       printf("\nt\t\t修改成功!请按任意键返回主菜单···");
       scanf("%d",&k);
       return ;
       }
      
       p=p->next;
    
      } 
    printf("\n\t\t你所输入的人名有误或不存在!按任意键返回主菜单···");
    scanf("%d",&k);
     return ;
    }




    void main()
    {
        int k;
        printf("\n\n\t\t========================================");
        printf("\n\n\t\t\t=***欢迎使用本通讯录管理系统***=\n\n\n");
        printf("\t\t请选择:(1-7):\n");
        printf("\t\t**********************************************\n");
        printf("\t\t\t1.建立通讯录\n");
        printf("\t\t\t2.浏览通讯录信息\n");
        printf("\t\t\t3.查找通讯录信息\n");
        printf("\t\t\t4.添加通讯录信息\n");
        printf("\t\t\t5.删除通讯录信息\n");
        printf("\t\t\t6.修改通讯录信息\n");
        printf("\t\t\t7.退出系统\n");
        printf("\n\t\t*********************************************\n");
        printf("\n\t\t你的选择是:");
        scanf("%d",&k);
       switch(k)
       {
       
       case 1:create(head);break;
       case 2:print(head);break;
       case 3:seek(head);break;;
       case 4:add(head);break;
       case 5:dele(head);break;
       case 6:modify(head);break;
       case 7:return;
       default:printf("\t\t选择错误!请重新选择:");   
               scanf("%d",&k);
       }

     return ;
    }
为什么每次执行到这里都停止工作?是因为没有用到文件吗?帮忙看看什么问题?谢谢

[ 本帖最后由 cyuyan793445 于 2013-3-6 15:15 编辑 ]
搜索更多相关主题的帖子: number person telephone 工作 通讯录 
2013-03-06 15:13
梦幻乐园
Rank: 2
等 级:论坛游民
帖 子:62
专家分:87
注 册:2012-10-25
得分:3 
程序太多了,看不清楚呀
2013-03-06 15:43
小xiong
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:388
专家分:1722
注 册:2013-2-8
得分:3 
printf("\n\n======================================================================\n\n");
       printf("\t\t请输入以下信息:");
   for(i=1;i<n;i++)
   {
    printf("\n\t\t第%d位同学的姓名:",i);
    scanf("%s",(p->name));
   printf("\t\t第%d位同学的性别:",i);
    scanf("%s",(p->sex));
    printf("\t\t第%d位同学的电话号码:",i);
    scanf("%d",&(p->telephone));
   printf("\t\t第%d位同学的QQ:",i);
   scanf("%d",&(p->QQ));
   printf("\t\t第%d同学的家庭号码:",i);
   scanf("%d",&(p->hometele));
   printf("\t\t第%d位同学的电子邮件:",i);
   scanf("%s",(p->address));
   printf("\t\t第%d位同学的出生日期:",i);
   scanf("%d/%d/%d",&(p->birthday.year),&(p->birthday.month),&(p->birthday.day));
   p=p->next;
   }//这一块里面有错误,,,呵呵!
2013-03-06 18:56
爱电脑的小白
Rank: 2
等 级:论坛游民
帖 子:40
专家分:65
注 册:2013-3-6
得分:3 

我这里也不太懂,一起学习咯。
红色是我加的,试了下能运行了。
还是得请大神来看看。

void create(struct person*head)
{
   
    int i=0;
    head=(person*)malloc(sizeof(struct person));
    head->next=NULL;      
    p=(person*)malloc(sizeof(struct person));
    if(p==NULL)  //这里应该是等号“==”
    {
        printf("申请内存不成功!");
        free(p);
        return ;
    }
   
    else
    {
        printf("\n\n======================================================================\n\n");
        printf("\t\t请输入以下信息:");
        for(i=1;i<n;i++)
        {
            printf("\n\t\t第%d位同学的姓名:",i);
            scanf("%s",&(p->name));
            printf("\t\t第%d位同学的性别:",i);
            scanf("%s",&(p->sex));
            printf("\t\t第%d位同学的电话号码:",i);
            scanf("%d",&(p->telephone));
            printf("\t\t第%d位同学的QQ:",i);
            scanf("%d",&(p->QQ));
            printf("\t\t第%d同学的家庭号码:",i);
            scanf("%d",&(p->hometele));
            printf("\t\t第%d位同学的电子邮件:",i);
            scanf("%s",&(p->address));
            printf("\t\t第%d位同学的出生日期:",i);
            scanf("%d/%d/%d",&(p->birthday.year),&(p->birthday.month),&(p->birthday.day));
          p->next=head->next;
            head->next=p;
        }
//        p->next=NULL;
        printf("\n\n===========================================");
        printf("\n\n\t\t信息记录保存成功!");
        return ;
        
    }
   
}

大家好,我是小白。
2013-03-06 21:39
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2391
专家分:13384
注 册:2013-3-3
得分:3 
#include<stdio.h>
 #include<stdlib.h>
 #include<string.h>
 int n=4;
 struct person
 {
 
    int number;
   char name[10];
   char sex[10];                                               //sex应该是个字符数组
   int telephone;
   int QQ;
   int hometele; //家庭电话
   char email;
   char address[30]; //通讯地址
   struct
  {
     unsigned short year;
     unsigned short month;
     unsigned short day;
   } birthday;   //出生日期
   struct person*last;
struct person*next;
 };
struct person *head=NULL;
struct person *p;
int k;
//创建信息
void create(person *head)
   {
   
    int i=0;
    p=(person*)malloc(sizeof(struct person));
    if(p==NULL)                                         //应该是==
    {
      printf("申请内存不成功!");
      free(p);
    }
   
   else
   {  printf("\n\n======================================================================\n\n");
       printf("\t\t请输入以下信息:");
   for(i=1;i<=n;i++)
   {
    printf("\n\t\t第%d位同学的姓名:",i);
    scanf("%s",p->name);
   printf("\t\t第%d位同学的性别:",i);
    scanf("%s",p->sex);
    printf("\t\t第%d位同学的电话号码:",i);
    scanf("%d",&(p->telephone));
   printf("\t\t第%d位同学的QQ:",i);
   scanf("%d",&(p->QQ));
   printf("\t\t第%d同学的家庭号码:",i);
   scanf("%d",&(p->hometele));
   printf("\t\t第%d位同学的电子邮件:",i);
   scanf("%s",p->email);
   printf("\t\t第%d位同学的出生日期:",i);
   scanf("%d/%d/%d",&(p->birthday.year),&(p->birthday.month),&(p->birthday.day));
   p=p->next;
   }
    p->next=NULL;
    printf("\n\n===========================================");
    printf("\n\n\t\t信息记录保存成功!");
   return ;
   
   }
 
  }
这样可以了

Maybe
2013-03-06 22:30
woailuo2010
Rank: 2
等 级:论坛游民
帖 子:27
专家分:19
注 册:2013-3-1
得分:3 
看了君的程序,有种说不出的冲动!拜了

错过的青春,我用行动补回来!
2013-03-06 22:38
cyuyan793445
Rank: 1
来 自:江门五邑大学
等 级:新手上路
帖 子:20
专家分:0
注 册:2013-1-12
得分:0 
二楼的小白,本来运行就没问题的,就是的第1个功能'“建立信息”的时候,输入人名后就停止工作。你这样改了,那问题还是没解决啊。话说,你改的是什么意思,我看不懂,还请指教。

新手上路,各路大侠多多指教!多谢!
2013-03-07 08:03
cyuyan793445
Rank: 1
来 自:江门五邑大学
等 级:新手上路
帖 子:20
专家分:0
注 册:2013-1-12
得分:0 
应该是那些实现功能的函数除了让问题,帮忙找找,哈哈谢谢

新手上路,各路大侠多多指教!多谢!
2013-03-07 08:29
爱电脑的小白
Rank: 2
等 级:论坛游民
帖 子:40
专家分:65
注 册:2013-3-6
得分:0 
回复 7楼 cyuyan793445
就是你那个creat函数有问题啊,
p=p->next这里。
我的能运行吧,你再试试?

大家好,我是小白。
2013-03-07 14:43
a76962934
Rank: 2
等 级:论坛游民
帖 子:39
专家分:53
注 册:2012-5-30
得分:3 
结构体里面的name 和address都是数组   输入信息的时候不需要加&啊   不然会错误。  还有就是头结点和p没联系啊。      
2013-03-07 15:11



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




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

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