book*GreatLink() { book*h, *tail, *p; h=tail=(book*)malloc(sizeof(book)); h->next = NULL; int n = 0; printf("输入要录入书的数目:"); scanf("%d", &n); for (int i = 0; i < n; i++) { p = (book*)malloc(sizeof(book)); printf("IBSN:"); scanf("%s",&p->date.ISBN); printf("书名:"); scanf("%s",&p->date.name); printf("作者:"); scanf("%s",&p->date.writer); printf("出版社:"); scanf("%s",&p->date.ad); printf("价格:"); scanf("%s",&p->date.price); p->next = NULL; tail->next = p; tail = p; } return h;
时间: 2024-04-03 09:33:17 浏览: 17
这段代码是一个函数,函数名为 GreatLink,返回值类型为 book*。它的功能是录入图书信息,并将录入的图书信息以链表的形式连接起来,最后返回连接后的链表。
在函数内部,首先定义了一个头结点 h 和尾结点 tail,它们都是 book* 类型的指针,并且通过 malloc 函数分配了空间,使它们指向一个新的 book 类型的节点。
然后,通过 scanf 函数读取用户输入的图书数量,并使用 for 循环逐个读取每本书的信息,包括 ISBN、书名、作者、出版社和价格。每读入一本书的信息,就通过 malloc 函数为其分配空间,使它成为一个新的 book 类型的节点,并将其添加到链表的尾部。
最后,函数返回头结点 h,也就是连接后的链表的第一个节点的指针。
相关问题
void choose(book*h) { int i; int a = 1; while (a>0) { menu(); printf("请选择:"); scanf("%d",&i); switch (i) { case 1: h=GreatLink(); break; case 2: PrintLink(h); break; case 3: Insert(h); break; case 4: Search(h); break; case 5: revise(h); break; case 6: delete(h); break; case 0: printf("【退出】\n"); printf("退出成功!感谢您的使用!\n"); system("pause"); exit(0); break; default: printf("无效的命令!\n"); a = -1; break; } } }
这段代码是一个简单的控制台图书管理系统。函数 `choose` 用于提供一个菜单供用户选择,读取用户的输入并根据不同的选择调用不同的函数。具体来说,这个函数会循环打印菜单,要求用户输入选择,并根据用户的输入调用相应的函数。下面是菜单的选项和对应的功能:
1. 创建图书链表:调用 `GreatLink()` 函数创建一个图书链表,并将其返回。
2. 输出图书链表:调用 `PrintLink(h)` 函数,打印当前的图书链表。
3. 插入图书:调用 `Insert(h)` 函数,要求用户输入新的图书信息并将其插入到图书链表中。
4. 查找图书:调用 `Search(h)` 函数,要求用户输入需要查找的图书信息并在图书链表中查找。
5. 修改图书信息:调用 `revise(h)` 函数,要求用户输入需要修改的图书信息并在图书链表中进行修改。
6. 删除图书:调用 `delete(h)` 函数,要求用户输入需要删除的图书信息并将其从图书链表中删除。
0. 退出:打印退出信息并结束程序。
如果用户输入的不是菜单选项中的数字,则会提示无效的命令并退出循环。
7) void choose(book*h) { int i; int a = 1; while (a>0) { menu(); printf("请选择:"); scanf("%d",&i); switch (i) { case 1: h=GreatLink(); break; case 2: PrintLink(h); break; case 3: Insert(h); break; case 4: Search(h); break; case 5: revise(h); break; case 6: delete(h); break; case 0: printf("【退出】\n"); printf("退出成功!感谢您的使用!\n"); system("pause");//暂停,避免输出过快 exit(0); break; default: printf("无效的命令!\n"); a = -1;//跳出循环条件 break; } } }
该函数需要一个book类型的指针h作为参数,表示书籍链表的头指针。函数主要功能是根据用户的选择执行相应的操作,具体如下:
1. 显示菜单(menu()函数);
2. 提示用户输入选择(printf("请选择:")),并读取用户输入(scanf("%d",&i));
3. 根据用户输入的选择(i)执行相应的操作,包括:
1) 创建一个新的书籍链表,并返回链表的头指针(GreatLink()函数);
2) 打印书籍链表(PrintLink()函数);
3) 在书籍链表中插入一本新书(Insert()函数);
4) 在书籍链表中查找一本书籍(Search()函数);
5) 修改一本书籍的信息(revise()函数);
6) 删除一本书籍(delete()函数);
7) 退出程序,输出感谢信息(printf()和exit(0)函数)。
4. 当用户输入无效命令时,输出提示信息(printf("无效的命令!\n")),并将循环条件a赋值为-1,跳出while循环。
需要注意的是,函数中的book类型指针h是通过传值的方式传入函数的,因此在函数内部对h的修改不会影响到函数外部的h指针。而且,在函数内部通过GreatLink()函数创建的链表头指针也不能被外部函数访问到,因此该函数的作用仅限于对链表的操作,而不会影响到链表的头指针。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)