#include "header.h"
BLink US_select_book(BLink header, BK* select){
char yes_no;
BLink h = create_blink();
do {
show_book();
printf("请输入要购买的书籍名称与作者信息!!!\n");
BLink temp = (BK *)malloc(sizeof(BK)); // 为 temp 分配内存
printf("书籍名称:");
scanf("%s",temp->data.title);
CLEARKEY;
printf("作者姓名:");
scanf("%s",temp->data.writer);
CLEARKEY;
BLink p = findNode(header,&(temp->data));
if(p != NULL) { // 如果找到,则打印数据
printf_table_header_bk_not_null();
print_Blist(p);
printf_table_header_bk_under();
printf("确定选购该书吗(Y/N)?");
scanf("%c", &yes_no);
CLEARKEY;
if (yes_no == 'y' || yes_no == 'Y') {
printf("请输入购买数量:\n");
scanf("%d",&p->data.num);
CLEARKEY;
printf("添加成功!\n");
press_enter_continue();
// 将选购的书籍信息添加到链表中
p->next = NULL;
add_BKdata(h, p);
free(temp);
}
} else {
CLEARSCREEN;
printf("未找到该书籍信息!\n");
press_enter_continue();
}
printf("是否继续选购(Y/N)?");
scanf(" %c", &yes_no); // 添加空格以跳过之前输入的回车符
CLEARKEY;
CLEARSCREEN;
} while (yes_no == 'Y' || yes_no == 'y');
BLink tempCursor = h;
printf_US_buy_book_list_header();
printf_US_buy_book_list(tempCursor);
printf_US_buy_book_list_under();
press_enter_continue();
return h;
}
void printf_US_buy_book_list(BLink h){
while (h != NULL)
{
h = h->next;
printf("┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╋━━━━━━━━━━╋━━━━━━━━━━┫\n");
printf("┃%-30s┃%-30s┃%-30s┃%-8.2f¥┃%-10d┃\n",h->data.title,h->data.writer,h->data.press,h->data.price,h->data.num);
}
}
各位朋友,请问为什么这段函数在运行时打印完表格中的数据没有打印表格底框就自己中止了?
【以下回答由 GPT 生成】
这个代码中可能会出现几个问题。以下是我发现的一些错误和改进建议:
在代码中找不到 #include "header.h"
的定义。检查文件是否存在,并确保路径正确。如果该文件确实不存在,需要根据实际需要判断是否需要包含其他文件。
在 US_select_book
函数中,定义了 BLink h = create_blink();
,但并没有看到 create_blink()
函数的定义。检查该函数是否存在,并确保路径正确。
BLink temp = (BK *)malloc(sizeof(BK));
分配了内存给 temp
,但在释放 temp
前没有使用 free(temp)
进行释放。这可能导致内存泄漏。在适当的位置,添加 free(temp)
来释放内存。
在 scanf("%c", &yes_no);
读取 yes_no
变量时,可能会遇到问题。这是因为在前一个 scanf
读取输入时,回车符被留在了键盘缓冲区中。解决该问题的一种方法是在读取 yes_no
前添加一个额外的 getchar()
,以消耗掉回车符。例如,将 scanf("%c", &yes_no);
更改为 getchar(); scanf("%c", &yes_no);
。
printf_table_header_bk_not_null()
和 printf_table_header_bk_under()
函数未定义。确保这些函数的定义被正确包含,并且路径正确。
在添加书籍信息后,添加了 p->next = NULL;
。但是没有把新节点 p
添加到链表 h
中,因此链表保持不变。可能需要根据具体需求,将 p
添加到链表中来保存所选购的书籍信息。例如,可以调用 add_BKdata(h, p);
来将 p
添加到链表中。
这些是我在代码中发现的一些问题和改进建议。请检查并修复这些问题。如果我忽略了其他问题,请提供更多的信息以便我能够处理。
【相关推荐】
While循环退出来之后再打印一次底框。