沈阿清 2021-06-18 11:35 采纳率: 50%
浏览 19
已采纳

请问各位大佬这个通讯录代码第五个查找功能是哪里出了问题

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

typedef struct Node{

    struct {

        char name[20];

        char number[12];

    }data; //定义结构变量 

    char name[20];

    char number[12];

    struct Node *next;

}LNode,*LinkList;

void create(LinkList &L,int n)

{

 LinkList p;

 int i;

 L=(LinkList)malloc(sizeof(LNode));

 L->next=NULL; //建立带头结点的单链表 

 for(i=n;i>0;--i){

  p=(LinkList)malloc(sizeof(LNode)); //生成新结点 

  printf("请输入联系人姓名:");

  scanf("%s",p->data.name);

  printf("请输入联系人电话号码:");

  scanf("%s",p->data.number); 

  p->next=L->next;

  L->next=p;

 }

int insert(LinkList &L,int i,LinkList &s){//插入数据 

 LinkList p=L;int j=0;

 while (p&&j<i-1){

  p=p->next;++j;

 }

 if(!p||j>i-1){

        printf("插入位置不合法!");

        exit (1);

    }

    else{

  s=(LinkList)malloc(sizeof(LinkList));

        printf("请输入需要插入的联系人姓名:");

        scanf("%s",s->data.name);

        printf("请输入需要插入的联系人电话:");

        scanf("%s",s->data.number);

     s->next=p->next;

     p->next=s;     

 }

 return 1;

}

int delete0(LinkList &L,int i,LinkList &e){//删除第i个结点

    LinkList p=L,q;

    int j=0;

    while(p->next&&j<i-1){  

     p=p->next;

     ++j;

 }

 if(!(p->next)||j>i-1){

  printf("删除位置不合法");

  exit(1); 

 }

 else{

  q=p->next;

     p->next=q->next;

    // e=q;

     free(q);

     printf("您已删除成功!\n");

 } 

 

}

int locate(LinkList &L,int i,LinkList &s){

 LinkList p;int j=0; 

 while(p->next&&j<i-1){  

     p=p->next;

     ++j;

 }

 if(!p||j>i-1){

  printf("查找位置不合法");

  exit(1); 

 }

 else printf("%s\t%s\n",p->data.name,p->data.number);

}

void exit()

{

    printf("退出中.....\n");

    system("pause");

    exit(0);

}

void print(LinkList &L)

{

    LinkList p;

    p=L;

    printf("姓名\t\t电话\n\n");

    while(p->next!=NULL){

        p=p->next;

        printf("%s\t%s\n",p->data.name,p->data.number);

    }

}

int main()

{

 int choice;

 int n,i,j;

 LinkList p=NULL;

 LinkList L,s,e;

 while(1)

 {

  printf("********************\n");

        printf("1.创建链表\n");

        printf("2.插入个人信息\n");

        printf("3.删除个人信息\n");

        printf("4.显示全部信息\n");

        printf("5.查找个人信息\n");

        printf("6.退出\n");

        printf("********************\n");

        printf("请输入功能序号\n");

     scanf("%d",&choice);

     switch(choice) {

  case 1:

   printf("输入你想创建的数据组数:");

   scanf("%d",&n); 

      create(L,n);

      break;

  case 2:

   printf("请输入需要插入的位置:");

            scanf("%d",&i); 

      insert(L,i,s); 

      break;

  case 3:

      printf("输入你想删除的位置:"); 

      scanf("%d",&i);

   delete0(L,i,e); 

   break;

  case 4:

   print(L);

   break;

  case 5:

   printf("输入你想查找的位置:"); 

      scanf("%

d",&i);

   locate(L,i,s);

  case 6:

   exit();

   break; 

  default:printf("输入有误,请重新输入:");

      break; 

     }

    }

 return 0;

 

  • 写回答

2条回答 默认 最新

  • 套你的猴子 2021-06-18 11:44
    关注
    int locate(LinkList &L,int i,LinkList &s){
     LinkList p;int j=0; 
        //这里你要循环L链表啊
     while(L->next&&j<i-1){  
    
         p=L->next;
    
         ++j;
    	
     }
    
     if(!p||j>i-1){
        printf("查找位置不合法");
    
        exit(1); 
    
        }else { 
             printf("%s\t%s\n",p->data.name,p->data.number);
        } 
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?