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

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

问题描述:

#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;

 

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);
    } 
}

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632