void modifyBook(Book *head, char *ISBN, char *name, char *author, char *publisher, float price, int quantity) { Book *p = head->next; while (p != NULL && strcmp(p->ISBN, ISBN) != 0) { p = p->next; } if (p == NULL) { printf("未找到指定的图书信息!\n"); } else { if (strlen(name) > 0) { strcpy(p->name, name); } if (strlen(author) > 0) { strcpy(p->author, author); } if (strlen(publisher) > 0) { strcpy(p->publisher, publisher); } if (price > 0) { p->price = price; } if (quantity > 0) { p->quantity = quantity; } printf("图书信息修改成功!\n"); } }
时间: 2024-02-14 14:23:12 浏览: 49
基于Protobuf C++ serialize到char*的实现方法分析
这段代码是一个 C 语言函数,用于在链表中修改指定 ISBN 号的图书信息。它接收七个参数:一个指向链表头结点的指针 head,以及指向要修改的图书信息的 ISBN 号、书名、作者、出版社、价格和数量的指针或值。
函数的主体代码如下:
1. Book *p = head->next; // 定义一个指向链表第一个节点的指针 p
2. while (p != NULL && strcmp(p->ISBN, ISBN) != 0) { // 遍历链表,查找指定 ISBN 号的节点
3. p = p->next; // 更新 p 指针为当前节点的下一个节点
4. }
5. if (p == NULL) { // 如果遍历完整个链表都没有找到指定 ISBN 号的节点
6. printf("未找到指定的图书信息!\n");
7. } else { // 否则,找到了指定 ISBN 号的节点
8. if (strlen(name) > 0) { // 如果传入了要修改的书名
9. strcpy(p->name, name); // 将当前节点的书名修改为传入的书名
10. }
11. if (strlen(author) > 0) { // 如果传入了要修改的作者名
12. strcpy(p->author, author); // 将当前节点的作者名修改为传入的作者名
13. }
14. if (strlen(publisher) > 0) { // 如果传入了要修改的出版社名
15. strcpy(p->publisher, publisher); // 将当前节点的出版社名修改为传入的出版社名
16. }
17. if (price > 0) { // 如果传入了要修改的价格
18. p->price = price; // 将当前节点的价格修改为传入的价格
19. }
20. if (quantity > 0) { // 如果传入了要修改的数量
21. p->quantity = quantity; // 将当前节点的数量修改为传入的数量
22. }
23. printf("图书信息修改成功!\n");
24. }
在这段代码中,首先定义了一个指针变量 p,用于遍历链表。然后通过 while 循环遍历链表,直到找到指定 ISBN 号的节点或者遍历完整个链表。
如果遍历完整个链表都没有找到指定 ISBN 号的节点,函数会输出一个提示信息。否则,函数会根据传入的参数修改当前节点的图书信息,并输出一个修改成功的提示信息。
需要注意的是,该函数没有返回值,因为它直接修改了链表数据结构的内容。另外,使用该函数时需要确保传入的链表头结点的 next 指针指向链表的第一个节点,否则可能会引起错误。
阅读全文