鱼C论坛

 找回密码
 立即注册
查看: 1745|回复: 18

[已解决]这个函数哪里错了

[复制链接]
发表于 2021-5-11 19:54:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 孤世星辰 于 2021-5-13 09:18 编辑


捕31获.PNG
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>

  4. struct Call
  5. {
  6.         char name[20];
  7.         int phone[20];
  8.         struct Call *next;
  9. };

  10. void getInput(struct Call *call);
  11. void addPerson(struct Call **head);
  12. struct Call *findPerson(struct Call *head);
  13. void displayContacts(struct Call *head);
  14. void printPerson(struct Call *call);
  15. void changePerson(struct Call *head);
  16. void delPerson(struct Call **head);
  17. void getInput(struct Call *call)
  18. {
  19.         printf("请输入姓名:");
  20.         scanf("%s",call->name);
  21.         printf("请输入电话:");
  22.         scanf("%d",call->phone);
  23. }
  24. void addPerson(struct Call **head)
  25. {
  26.         struct Call *call,*temp;
  27.         static struct Call *tail;
  28.         call=(struct Call *)malloc(sizeof(struct Call));
  29.         if(call==NULL)
  30.         {
  31.                 printf("内存分配失败!\n");
  32.                 exit(1);
  33.         }
  34.         getInput(call);
  35.         if(*head!=NULL)
  36.         {
  37.                 tail->next=call;
  38.                 call->next=NULL;
  39.         }
  40.         else
  41.         {
  42.                 *head=call;
  43.                 call->next=NULL;
  44.         }
  45.         tail=call;
  46. }
  47. struct Call *findPerson(struct Call *head)
  48. {
  49.         struct Call *call;
  50.         char input[128];
  51.         call=head;
  52.         printf("请输入要查找的姓名:");
  53.         scanf("%s",input);
  54.         while(call!=NULL)
  55.         {
  56.                 if(!strcmp(call->name,input)||call!=NULL)
  57.                 {
  58.                         break;
  59.                 }
  60.                 call=call->next;
  61.         }
  62.         return call;
  63. }
  64. void displayContacts(struct Call *head)
  65. {
  66.         struct Call *call;
  67.         int count=1;
  68.         while(call != NULL)
  69.         {
  70.                 printf("第%d位联系人",count);
  71.                 printf("姓名:%s\n",call->name);
  72.                 printf("电话:%d\n",call->phone);
  73.                 call=call->next;
  74.                 count++;
  75.         }
  76. }
  77. void printPerson(struct Call *call)
  78. {
  79.         printf("姓名:%s",call->name);
  80.         printf("电话:%d",call->phone);
  81. }
  82. void changePerson(struct Call *head)
  83. {
  84.         struct Call *call;
  85.         call=findPerson(head);
  86.         if(call==NULL)
  87.         {
  88.                 printf("找不到!\n");
  89.         }
  90.         else
  91.         {
  92.                 printf("请输入新的号码:");
  93.                 scanf("%s",call->phone);
  94.         }
  95. }
  96. void delPerson(struct Call **head)
  97. {
  98.         struct Call *call;
  99.         struct Call *temp;
  100.         struct Call *pre;
  101.         struct Call *current;
  102.         call=findPerson(*head);
  103.         if(call==NULL)
  104.         {
  105.                 printf("没找到!\n");
  106.         }
  107.         else
  108.         {
  109.                 current=*head;
  110.                 pre=NULL;
  111.                 while(current!=NULL&&current!=call)
  112.                 {
  113.                         pre=current;
  114.                         current=current->next;
  115.                 }
  116.                 if(pre==NULL)
  117.                 {
  118.                         *head=current->next;
  119.                 }
  120.                 else
  121.                 {
  122.                         pre->next=current->next;
  123.                 }
  124.                 free(call);
  125.         }
  126. }
  127. void releaseContacts(struct Call **head)
  128. {
  129.         struct Call *temp;
  130.         while(head!=NULL)
  131.         {
  132.                 temp=*head;
  133.                 *head=(*head)->next;
  134.                 free(temp);
  135.         }
  136. }
  137. main(void)
  138. {
  139.         struct Call *head=NULL;
  140.         struct Call *call;
  141.         int input;
  142.         printf("| 欢迎使用通讯录管理程序 |\n");
  143.         printf("|--- 1:插入新的联系人--- |\n");
  144.         printf("|--- 2:查找新的联系人--- |\n");
  145.         printf("|--- 3:更改新的联系人--- |\n");
  146.         printf("|--- 4:删除新的联系人--- |\n");
  147.         printf("|--- 5:显示新的联系人--- |\n");
  148.         printf("|--- 6:退出新的联系人--- |\n");
  149.         while(1)
  150.         {
  151.                 printf("\n请输入代码指令:");
  152.                 scanf("%d",&input);
  153.                 switch(input)
  154.                 {
  155.                         case 1:addPerson(&head); break;
  156.                         case 2:findPerson(head);
  157.                                 if(call==NULL)
  158.                                 {
  159.                                         printf("找不到!\n");
  160.                                }
  161.                                 else
  162.                                 {
  163.                                         printPerson(call);
  164.                                 }
  165.                                 break;
  166.                         case 3:changePerson(head);break;
  167.                         case 4:delPerson(&head);break;
  168.                         case 5:displayContacts(head);break;
  169.                         case 6:goto END;
  170.                 }
  171.         }
  172. END:
  173.         releaseContacts(&head);

  174.         return 0;
复制代码
最佳答案
2021-5-13 11:11:55
你这个代码的问题也太多了吧,有认真检查代码吗

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>

  4. struct Call
  5. {
  6.     char name[20];
  7.     int phone[20];
  8.     struct Call *next;
  9. };

  10. void getInput(struct Call *call);
  11. void addPerson(struct Call **head);
  12. struct Call *findPerson(struct Call *head);
  13. void displayContacts(struct Call *head);
  14. void printPerson(struct Call *call);
  15. void changePerson(struct Call *head);
  16. void delPerson(struct Call **head);
  17. void getInput(struct Call *call)
  18. {
  19.     printf("请输入姓名:");
  20.     scanf("%s",call->name);
  21.     printf("请输入电话:");
  22.     scanf("%d",call->phone);
  23. }
  24. void addPerson(struct Call **head)
  25. {
  26.     //struct Call *call,*temp;
  27.     struct Call *call;
  28.     static struct Call *tail;
  29.     call=(struct Call *)malloc(sizeof(struct Call));
  30.     if(call==NULL)
  31.     {
  32.         printf("内存分配失败!\n");
  33.         exit(1);
  34.     }
  35.     getInput(call);
  36.     if(*head!=NULL)
  37.     {
  38.         tail->next=call;
  39.         call->next=NULL;
  40.     }
  41.     else
  42.     {
  43.         *head=call;
  44.         call->next=NULL;
  45.     }
  46.     tail=call;
  47. }
  48. struct Call *findPerson(struct Call *head)
  49. {
  50.     struct Call *call;
  51.     char input[128];
  52.     call=head;
  53.     printf("请输入要查找的姓名:");
  54.     scanf("%s",input);
  55.     while(call!=NULL)
  56.     {
  57.         if(!strcmp(call->name,input)||call!=NULL)
  58.         {
  59.             break;
  60.         }
  61.         call=call->next;
  62.     }
  63.     return call;
  64. }
  65. void displayContacts(struct Call *head)
  66. {
  67.     //struct Call *call;
  68.     struct Call *call = head;
  69.     int count=1;
  70.     while(call != NULL)
  71.     {
  72.         printf("第%d位联系人",count);
  73.         printf("姓名:%s\n",call->name);
  74.         //printf("电话:%d\n",call->phone);
  75.         printf("电话:%d\n", *call->phone);
  76.         call=call->next;
  77.         count++;
  78.     }
  79. }
  80. void printPerson(struct Call *call)
  81. {
  82.     printf("姓名:%s",call->name);
  83.     //printf("电话:%d",call->phone);
  84.     printf("电话:%d", *call->phone);
  85. }
  86. void changePerson(struct Call *head)
  87. {
  88.     struct Call *call;
  89.     call=findPerson(head);
  90.     if(call==NULL)
  91.     {
  92.         printf("找不到!\n");
  93.     }
  94.     else
  95.     {
  96.         printf("请输入新的号码:");
  97.         //scanf("%s",call->phone);
  98.         scanf("%d",call->phone);
  99.     }
  100. }
  101. void delPerson(struct Call **head)
  102. {
  103.     struct Call *call;
  104.     //struct Call *temp;
  105.     struct Call *pre;
  106.     struct Call *current;
  107.     call=findPerson(*head);
  108.     if(call==NULL)
  109.     {
  110.         printf("没找到!\n");
  111.     }
  112.     else
  113.     {
  114.         current=*head;
  115.         pre=NULL;
  116.         while(current!=NULL&&current!=call)
  117.         {
  118.             pre=current;
  119.             current=current->next;
  120.         }
  121.         if(pre==NULL)
  122.         {
  123.             *head=current->next;
  124.         }
  125.         else
  126.         {
  127.             pre->next=current->next;
  128.         }
  129.         free(call);
  130.     }
  131. }
  132. void releaseContacts(struct Call **head)
  133. {
  134.     struct Call *temp;
  135.     while(head!=NULL)
  136.     {
  137.         temp=*head;
  138.         *head=(*head)->next;
  139.         free(temp);
  140.     }
  141. }
  142. //main(void)
  143. int main(void)
  144. {
  145.     struct Call *head=NULL;
  146.     struct Call *call;
  147.     int input;
  148.     printf("| 欢迎使用通讯录管理程序 |\n");
  149.     printf("|--- 1:插入新的联系人--- |\n");
  150.     printf("|--- 2:查找新的联系人--- |\n");
  151.     printf("|--- 3:更改新的联系人--- |\n");
  152.     printf("|--- 4:删除新的联系人--- |\n");
  153.     printf("|--- 5:显示新的联系人--- |\n");
  154.     printf("|--- 6:退出新的联系人--- |\n");
  155.     while(1)
  156.     {
  157.         printf("\n请输入代码指令:");
  158.         scanf("%d",&input);
  159.         switch(input)
  160.         {
  161.             case 1:addPerson(&head); break;
  162.             //case 2:findPerson(head);
  163.             case 2: call = findPerson(head);
  164.                    if(call==NULL)
  165.                    {
  166.                        printf("找不到!\n");
  167.                    }
  168.                    else
  169.                    {
  170.                        printPerson(call);
  171.                    }
  172.                    break;
  173.             case 3:changePerson(head);break;
  174.             case 4:delPerson(&head);break;
  175.             case 5:displayContacts(head);break;
  176.             case 6:goto END;
  177.         }
  178.     }
  179. END:
  180.     releaseContacts(&head);

  181.     return 0;
  182. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-5-12 10:00:32 | 显示全部楼层
代码整个发出来
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-12 11:20:04 | 显示全部楼层
你只贴一个代码片段,是肯定这段代码有问题?
就算是你肯定,问题是我们不知道 struct Call 这个结构体的内容
不知道这个数据结构的创建和销毁方法,简单来说就是不了解这个数据结构的物理布局和逻辑布局
如果要帮你解决问题,只有两种方法
1. 完全靠猜
2. 问你要完整的代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-13 09:18:37 | 显示全部楼层

发了发了,大佬给看一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-13 09:19:07 | 显示全部楼层
人造人 发表于 2021-5-12 11:20
你只贴一个代码片段,是肯定这段代码有问题?
就算是你肯定,问题是我们不知道 struct Call 这个结构体的 ...

错了错了,我发了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-13 09:57:01 | 显示全部楼层
麻烦你把所有的变量初始化一遍
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-13 10:41:23 | 显示全部楼层
yuxijian2020 发表于 2021-5-13 09:57
麻烦你把所有的变量初始化一遍

捕111获.PNG
  1.         struct Call *call=NULL;
  2.         struct Call *temp=NULL;
  3.         struct Call *pre=NULL;
  4.         struct Call *current=NULL;
复制代码

是这样么
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-13 11:11:55 | 显示全部楼层    本楼为最佳答案   
你这个代码的问题也太多了吧,有认真检查代码吗

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>

  4. struct Call
  5. {
  6.     char name[20];
  7.     int phone[20];
  8.     struct Call *next;
  9. };

  10. void getInput(struct Call *call);
  11. void addPerson(struct Call **head);
  12. struct Call *findPerson(struct Call *head);
  13. void displayContacts(struct Call *head);
  14. void printPerson(struct Call *call);
  15. void changePerson(struct Call *head);
  16. void delPerson(struct Call **head);
  17. void getInput(struct Call *call)
  18. {
  19.     printf("请输入姓名:");
  20.     scanf("%s",call->name);
  21.     printf("请输入电话:");
  22.     scanf("%d",call->phone);
  23. }
  24. void addPerson(struct Call **head)
  25. {
  26.     //struct Call *call,*temp;
  27.     struct Call *call;
  28.     static struct Call *tail;
  29.     call=(struct Call *)malloc(sizeof(struct Call));
  30.     if(call==NULL)
  31.     {
  32.         printf("内存分配失败!\n");
  33.         exit(1);
  34.     }
  35.     getInput(call);
  36.     if(*head!=NULL)
  37.     {
  38.         tail->next=call;
  39.         call->next=NULL;
  40.     }
  41.     else
  42.     {
  43.         *head=call;
  44.         call->next=NULL;
  45.     }
  46.     tail=call;
  47. }
  48. struct Call *findPerson(struct Call *head)
  49. {
  50.     struct Call *call;
  51.     char input[128];
  52.     call=head;
  53.     printf("请输入要查找的姓名:");
  54.     scanf("%s",input);
  55.     while(call!=NULL)
  56.     {
  57.         if(!strcmp(call->name,input)||call!=NULL)
  58.         {
  59.             break;
  60.         }
  61.         call=call->next;
  62.     }
  63.     return call;
  64. }
  65. void displayContacts(struct Call *head)
  66. {
  67.     //struct Call *call;
  68.     struct Call *call = head;
  69.     int count=1;
  70.     while(call != NULL)
  71.     {
  72.         printf("第%d位联系人",count);
  73.         printf("姓名:%s\n",call->name);
  74.         //printf("电话:%d\n",call->phone);
  75.         printf("电话:%d\n", *call->phone);
  76.         call=call->next;
  77.         count++;
  78.     }
  79. }
  80. void printPerson(struct Call *call)
  81. {
  82.     printf("姓名:%s",call->name);
  83.     //printf("电话:%d",call->phone);
  84.     printf("电话:%d", *call->phone);
  85. }
  86. void changePerson(struct Call *head)
  87. {
  88.     struct Call *call;
  89.     call=findPerson(head);
  90.     if(call==NULL)
  91.     {
  92.         printf("找不到!\n");
  93.     }
  94.     else
  95.     {
  96.         printf("请输入新的号码:");
  97.         //scanf("%s",call->phone);
  98.         scanf("%d",call->phone);
  99.     }
  100. }
  101. void delPerson(struct Call **head)
  102. {
  103.     struct Call *call;
  104.     //struct Call *temp;
  105.     struct Call *pre;
  106.     struct Call *current;
  107.     call=findPerson(*head);
  108.     if(call==NULL)
  109.     {
  110.         printf("没找到!\n");
  111.     }
  112.     else
  113.     {
  114.         current=*head;
  115.         pre=NULL;
  116.         while(current!=NULL&&current!=call)
  117.         {
  118.             pre=current;
  119.             current=current->next;
  120.         }
  121.         if(pre==NULL)
  122.         {
  123.             *head=current->next;
  124.         }
  125.         else
  126.         {
  127.             pre->next=current->next;
  128.         }
  129.         free(call);
  130.     }
  131. }
  132. void releaseContacts(struct Call **head)
  133. {
  134.     struct Call *temp;
  135.     while(head!=NULL)
  136.     {
  137.         temp=*head;
  138.         *head=(*head)->next;
  139.         free(temp);
  140.     }
  141. }
  142. //main(void)
  143. int main(void)
  144. {
  145.     struct Call *head=NULL;
  146.     struct Call *call;
  147.     int input;
  148.     printf("| 欢迎使用通讯录管理程序 |\n");
  149.     printf("|--- 1:插入新的联系人--- |\n");
  150.     printf("|--- 2:查找新的联系人--- |\n");
  151.     printf("|--- 3:更改新的联系人--- |\n");
  152.     printf("|--- 4:删除新的联系人--- |\n");
  153.     printf("|--- 5:显示新的联系人--- |\n");
  154.     printf("|--- 6:退出新的联系人--- |\n");
  155.     while(1)
  156.     {
  157.         printf("\n请输入代码指令:");
  158.         scanf("%d",&input);
  159.         switch(input)
  160.         {
  161.             case 1:addPerson(&head); break;
  162.             //case 2:findPerson(head);
  163.             case 2: call = findPerson(head);
  164.                    if(call==NULL)
  165.                    {
  166.                        printf("找不到!\n");
  167.                    }
  168.                    else
  169.                    {
  170.                        printPerson(call);
  171.                    }
  172.                    break;
  173.             case 3:changePerson(head);break;
  174.             case 4:delPerson(&head);break;
  175.             case 5:displayContacts(head);break;
  176.             case 6:goto END;
  177.         }
  178.     }
  179. END:
  180.     releaseContacts(&head);

  181.     return 0;
  182. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-13 12:50:35 | 显示全部楼层
本帖最后由 孤世星辰 于 2021-5-13 12:52 编辑
人造人 发表于 2021-5-13 11:11
你这个代码的问题也太多了吧,有认真检查代码吗


其实我对这个程序也不是理解的特别深刻,我有好多问题都一知半解,大佬可以帮我解释一下么,真的超级感谢

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>

  4. struct Call
  5. {
  6.     char name[20];
  7.     int phone[20];
  8.     struct Call *next;
  9. };

  10. void getInput(struct Call *call);
  11. void addPerson(struct Call **head);
  12. struct Call *findPerson(struct Call *head);
  13. void displayContacts(struct Call *head);
  14. void printPerson(struct Call *call);
  15. void changePerson(struct Call *head);
  16. void delPerson(struct Call **head);

  17. void getInput(struct Call *call)
  18. {
  19.     printf("请输入姓名:");
  20.     scanf("%s",call->name);
  21.     printf("请输入电话:");
  22.     scanf("%d",call->phone);
  23. }
  24. void addPerson(struct Call **head)           //这里传来的是head的地址,所以这里**是代表head指针的指针么,但是我没有定义过这个指针啊,系统自己就会有么
  25.                                                             //还有就是这里不是只要修改head指针就好了么,为什么要传入head指针的指针,像我们平时改一个变量不是让a=1就好了么,不应该只要改head指针就好了嘛
  26. {
  27.     //struct Call *call,*temp;
  28.     struct Call *call;
  29.     static struct Call *tail;
  30.     call=(struct Call *)malloc(sizeof(struct Call));
  31.     if(call==NULL)
  32.     {
  33.         printf("内存分配失败!\n");
  34.         exit(1);
  35.     }
  36.     getInput(call);
  37.     if(*head!=NULL)
  38.     {
  39.         tail->next=call;                                       
  40.         call->next=NULL;
  41.     }
  42.     else
  43.     {
  44.         *head=call;                                           //这个是head指针指向call,意思是结构体跟数组一样是地址么
  45.         call->next=NULL;
  46.     }
  47.     tail=call;
  48. }
  49. struct Call *findPerson(struct Call *head)          //这里find前面为啥要加*,是因为要返回结构体指针么?
  50. {
  51.     struct Call *call;
  52.     char input[128];
  53.     call=head;
  54.     printf("请输入要查找的姓名:");
  55.     scanf("%s",input);
  56.     while(call!=NULL)
  57.     {
  58.         if(!strcmp(call->name,input)||call!=NULL)
  59.         {
  60.             break;
  61.         }
  62.         call=call->next;
  63.     }
  64.     return call;
  65. }
  66. void displayContacts(struct Call *head)
  67. {
  68.     //struct Call *call;
  69.     struct Call *call = head;
  70.     int count=1;
  71.     while(call != NULL)
  72.     {
  73.         printf("第%d位联系人",count);
  74.         printf("姓名:%s\n",call->name);
  75.         //printf("电话:%d\n",call->phone);
  76.         printf("电话:%d\n", *call->phone);
  77.         call=call->next;
  78.         count++;
  79.     }
  80. }
  81. void printPerson(struct Call *call)
  82. {
  83.     printf("姓名:%s",call->name);
  84.     //printf("电话:%d",call->phone);
  85.     printf("电话:%d", *call->phone);
  86. }
  87. void changePerson(struct Call *head)
  88. {
  89.     struct Call *call;
  90.     call=findPerson(head);
  91.     if(call==NULL)
  92.     {
  93.         printf("找不到!\n");
  94.     }
  95.     else
  96.     {
  97.         printf("请输入新的号码:");
  98.         //scanf("%s",call->phone);
  99.         scanf("%d",call->phone);
  100.     }
  101. }
  102. void delPerson(struct Call **head)
  103. {
  104.     struct Call *call;
  105.     //struct Call *temp;
  106.     struct Call *pre;
  107.     struct Call *current;
  108.     call=findPerson(*head);                        //这里应该是传入head么
  109.     if(call==NULL)
  110.     {
  111.         printf("没找到!\n");
  112.     }
  113.     else
  114.     {
  115.         current=*head;                                //为啥不是*current=*head,这样把head指针给current指针,到底是*current代表指针还是current代表指针?搞不懂这两个区别
  116.         pre=NULL;
  117.         while(current!=NULL&&current!=call)
  118.         {
  119.             pre=current;
  120.             current=current->next;
  121.         }
  122.         if(pre==NULL)
  123.         {
  124.             *head=current->next;
  125.         }
  126.         else
  127.         {
  128.             pre->next=current->next;
  129.         }
  130.         free(call);
  131.     }
  132. }
  133. void releaseContacts(struct Call **head)
  134. {
  135.     struct Call *temp;
  136.     while(head!=NULL)
  137.     {
  138.         temp=*head;
  139.         *head=(*head)->next;
  140.         free(temp);
  141.     }
  142. }
  143. //main(void)
  144. int main(void)
  145. {
  146.     struct Call *head=NULL;
  147.     struct Call *call;
  148.     int input;
  149.     printf("| 欢迎使用通讯录管理程序 |\n");
  150.     printf("|--- 1:插入新的联系人--- |\n");
  151.     printf("|--- 2:查找新的联系人--- |\n");
  152.     printf("|--- 3:更改新的联系人--- |\n");
  153.     printf("|--- 4:删除新的联系人--- |\n");
  154.     printf("|--- 5:显示新的联系人--- |\n");
  155.     printf("|--- 6:退出新的联系人--- |\n");
  156.     while(1)
  157.     {
  158.         printf("\n请输入代码指令:");
  159.         scanf("%d",&input);
  160.         switch(input)
  161.         {
  162.             case 1:addPerson(&head); break;
  163.             //case 2:findPerson(head);
  164.             case 2: call = findPerson(head);          //这边不是返回了call么为什么又要call=find()?是因为局部变量?
  165.                    if(call==NULL)
  166.                    {
  167.                        printf("找不到!\n");
  168.                    }
  169.                    else
  170.                    {
  171.                        printPerson(call);
  172.                    }
  173.                    break;
  174.             case 3:changePerson(head);break;
  175.             case 4:delPerson(&head);break;
  176.             case 5:displayContacts(head);break;
  177.             case 6:goto END;
  178.         }
  179.     }
  180. END:
  181.     releaseContacts(&head);

  182.     return 0;
  183. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-13 13:43:02 | 显示全部楼层
孤世星辰 发表于 2021-5-13 12:50
其实我对这个程序也不是理解的特别深刻,我有好多问题都一知半解,大佬可以帮我解释一下么,真的超级感 ...
  1. void addPerson(struct Call **head)           //这里传来的是head的地址,所以这里**是代表head指针的指针么,但是我没有定义过这个指针啊,系统自己就会有么
  2.                                                             //还有就是这里不是只要修改head指针就好了么,为什么要传入head指针的指针,像我们平时改一个变量不是让a=1就好了么,不应该只要改head指针就好了嘛
  3. 要修改这个指针的值,就需要这个指针的地址,就是指向指针的指针,二级指针

  4. *head=call;                                           //这个是head指针指向call,意思是结构体跟数组一样是地址么
  5. 是改变调用这个函数的时候传入的那个变量的值
  6. 在这里是改变main函数中第149行的那个head变量的值,因为165行调用addPerson这个函数的时候把head的地址作为参数(&head)
  7. 149行的head是一个指针
  8. 就是改变这个指针变量中保存的值,就是改变这个指针的指向


  9. struct Call *findPerson(struct Call *head)          //这里find前面为啥要加*,是因为要返回结构体指针么?


  10. call=findPerson(*head);                        //这里应该是传入head么
  11. 不行,因为findPerson这个函数要求一个struct Call *head,是个一级指针,而delPerson这个函数的head是一个二级指针


  12. current=*head;                                //为啥不是*current=*head,这样把head指针给current指针,到底是*current代表指针还是current代表指针?搞不懂这两个区别
  13. *current是对这个指针解引用,current是一个一级指针,而且没有让这个指针指向一个有效的对象,不能对current解引用
  14. current=*head; *head就是main函数中第149行的那个head变量中的内容,这是让current这个指针和main函数中149行的那个head指向同一个对象

  15. case 2: call = findPerson(head);          //这边不是返回了call么为什么又要call=find()?是因为局部变量?
  16. 不明白你的问题,这个是让call指向findPerson函数返回的那个对象

复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
孤世星辰 + 5 + 5 + 3

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-13 14:18:08 | 显示全部楼层

哦哦哦谢谢,我终于理顺了,最后那个问题就是find函数最后不是return call了么
那么我直接
find(head)
if(call==NULL)这样判断不可以么
为什么还要
call=find(head)
if(call==NULL)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-13 14:35:37 | 显示全部楼层
孤世星辰 发表于 2021-5-13 14:18
哦哦哦谢谢,我终于理顺了,最后那个问题就是find函数最后不是return call了么
那么我直接
find(head ...

你没有为变量call赋值呀,把返回值赋值给call

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-13 14:42:11 | 显示全部楼层
人造人 发表于 2021-5-13 14:35
你没有为变量call赋值呀,把返回值赋值给call


哦哦哦好的吧,那我记住了,但是我的运行功能不对诶,是我编译器的问题么
捕54获.PNG
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-13 15:40:50 | 显示全部楼层
孤世星辰 发表于 2021-5-13 14:42
哦哦哦好的吧,那我记住了,但是我的运行功能不对诶,是我编译器的问题么

提示让你输入指令,你输入 “蠢才”干嘛
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-13 17:25:22 | 显示全部楼层
人造人 发表于 2021-5-13 15:40
提示让你输入指令,你输入 “蠢才”干嘛

啊这,还是不对呢
122捕获.PNG
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-13 19:20:08 | 显示全部楼层
  1. void releaseContacts(struct Call **head)
  2. {
  3.     struct Call *temp;
  4.     //while(head!=NULL)
  5.     while(*head!=NULL)
  6.     {
  7.         temp=*head;
  8.         *head=(*head)->next;
  9.         free(temp);
  10.     }
  11. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-14 09:44:11 | 显示全部楼层
本帖最后由 孤世星辰 于 2021-5-14 09:47 编辑


还有一个问题是为啥我输入‘蠢才’,但是他给我找到的永远是第一个联系人呢?
  1.         if(!strcmp(call->name,input)||call!=NULL)
复制代码

是这个有问题么
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-14 09:52:37 | 显示全部楼层
孤世星辰 发表于 2021-5-14 09:44
还有一个问题是为啥我输入‘蠢才’,但是他给我找到的永远是第一个联系人呢?

是这个有问题么

是不等于还是等于?
if(!strcmp(call->name,input)||call == NULL)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-14 10:16:15 | 显示全部楼层
人造人 发表于 2021-5-14 09:52
是不等于还是等于?
if(!strcmp(call->name,input)||call == NULL)

嗯嗯这回好了,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-29 09:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表