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-01 19:33:53 浏览: 18
这是一个函数 `GreatLink()`,它创建了一个链表并返回链表的头节点指针。
在函数内,首先定义了三个 `book` 类型的指针变量 `h`、`tail` 和 `p`。其中 `h` 和 `tail` 都指向一个新分配的 `book` 类型的节点,并将它们的 `next` 指针都设置为 `NULL`。然后,函数接受用户输入一个整数 `n`,表示要录入多少本书。
接下来,使用 `for` 循环,从用户输入中读入每本书的信息,并将其存储在一个新创建的 `book` 节点 `p` 中。每次循环结束后,将 `p` 添加到链表的尾部,即将 `tail` 的 `next` 指针设置为 `p`,并将 `tail` 指向 `p`。最后,将链表的头节点指针 `h` 返回。
需要注意的是,在每次读入字符串时,使用 `scanf()` 函数时应该使用 `%s` 而不是 `&%s`。
相关问题
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;
这段代码是一个函数,函数名为 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. 退出:打印退出信息并结束程序。
如果用户输入的不是菜单选项中的数字,则会提示无效的命令并退出循环。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.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)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)