鱼C论坛

 找回密码
 立即注册
查看: 935|回复: 2

[已解决]关于单链表打印图书的代码问题,求大神帮助!

[复制链接]
发表于 2020-11-25 18:20:07 | 显示全部楼层 |阅读模式

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

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

x

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

  3. struct Book//声明一个单链表book的一个节点
  4. {
  5.         char title[128];
  6.         char author[40];
  7.         struct Book *next;
  8. };

  9. void getInput(struct Book *book);
  10. void getInput(struct Book *book)
  11. {
  12.         printf("请输入书名:");
  13.         scanf("%s", book->title);
  14.         printf("请输入作者:");
  15.         scanf("%s", book->author);
  16. }

  17. void addBook(struct Book **library);//参数为一个指向头指针的指针==头指针地址)
  18. void addBook(struct Book **library)
  19. {
  20.         struct Book *book;
  21.         struct Book *temp;//一个临时变量
  22.         book = (struct Book *)malloc(sizeof(struct Book));//给book指针申请一个动态内存
  23.         if(book == NULL)
  24.     {
  25.                 printf("内存分配失败!");
  26.                 exit(1);
  27.         }
  28.        
  29.         getInput(book);//调用getInput函数传入书籍信息
  30.        
  31.         if(*library != NULL) //对**library进行一层解引用,得到的是头指针,这里是头指针不指向NULL,也就是不为空链表的情况
  32.         {
  33.                 temp = *library;
  34.                 *library = book;
  35.                 book->next = temp;
  36.         }
  37.         else//头指针指向NULL的情况 ,为空链表
  38.         {
  39.                 *library = book;//将指向第一本书的指针赋值给头指针,使得头指针指向这本书
  40.                 book->next = NULL;//book的下一个节点指向NULL
  41.         }
  42. }

  43. void printLibrary(struct Book *library);//形参为头指针
  44. void printLibrary(struct Book *library)//形参为头指针
  45. {
  46.         struct Book *book;
  47.         int count = 1;
  48.        
  49.         book = library;
  50.         while(book != NULL)
  51.         {
  52.                 printf("Book:%d", count);
  53.                 printf("书名:%s", book->title);
  54.                 printf("作者:%s", book->author);
  55.                 book = book->next;//将下本书的地址传给book
  56.                 count++;
  57.         }
  58. }

  59. void release(struct book **library);
  60. void release(struct book **library)
  61. {
  62.         struct Book *temp;
  63.        
  64.         while(*library != NULL)
  65.         {
  66.                 temp = *library;
  67.                 *library = (*library)->next;
  68.                 free(temp);
  69.         }
  70. }

  71. int main(void)
  72. {
  73.         int ch;
  74.         struct Book *library = NULL;//头指针刚开始指向NULL,是一个空链表
  75.        
  76.         while(1)
  77.         {
  78.                 printf("请问是否需要录入书籍信息(Y/N)");
  79.                 do
  80.                 {
  81.                         ch = getchar();       
  82.                 } while(ch != 'Y' && ch !='N');
  83.                
  84.                 if(ch == 'Y');
  85.                 {
  86.                         addBook(&library);
  87.                 }
  88.                 else
  89.                 {
  90.                         break;
  91.                 }
  92.         }
  93.         printf("请问是否需要打印图书信息?(Y/N)");
  94.         do
  95.                 {
  96.                         ch = getchar();       
  97.                 } while(ch != 'Y' && ch !='N');
  98.                
  99.                 if(ch == 'Y');
  100.                 {
  101.                         printLibrary(library);
  102.                 }
  103.                 else
  104.                 {
  105.                         break;
  106.                 }
  107.        
  108.         release(&library);
  109.        
  110.         return 0;
  111. }
复制代码


Dev运行的时候65行红了,请问一下怎么解决呢
最佳答案
2020-11-25 18:27:49
本帖最后由 jackz007 于 2020-11-25 18:39 编辑

      这 2 句
  1. void release(struct book **library);
  2. void release(struct book **library)
复制代码

      改为
  1. void release(struct Book **library);
  2. void release(struct Book **library)
复制代码

      这 1 句(90、105行)
  1.                if(ch == 'Y');
复制代码

      改为
  1.                if(ch == 'Y')
复制代码

      删除 109 ~ 113 行代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-11-25 18:27:49 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2020-11-25 18:39 编辑

      这 2 句
  1. void release(struct book **library);
  2. void release(struct book **library)
复制代码

      改为
  1. void release(struct Book **library);
  2. void release(struct Book **library)
复制代码

      这 1 句(90、105行)
  1.                if(ch == 'Y');
复制代码

      改为
  1.                if(ch == 'Y')
复制代码

      删除 109 ~ 113 行代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-25 19:02:39 | 显示全部楼层
jackz007 发表于 2020-11-25 18:27
这 2 句

      改为

谢谢谢谢!好愚蠢的错误啊!!但是就是没有发现
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-9 03:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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