我是c的新手并且了解链接列表,我决定创建一个库管理器来使用链接列表来管理我的书籍,但似乎并没有使用链接列表将数据保存到结构中。当有人试图添加一本新书时,该函数会点击checkID函数来查看具有相同id的书是否已经存在,但是当我显示信息时,结构中似乎没有任何内容。
void addBook()
{
int bookId;
BOOK *head = NULL, *temp;
temp = (BOOK*) malloc(sizeof(BOOK));
printf("\n Enter Book Details\n");
printf("Enter book ISBN: ");
scanf("%d", &bookId);
int bInd = checkID(bookId);
if (bInd == 0)
{
printf("Enter book title: ");
scanf("%s", &temp->chTitle);
printf("Enter book type (eg. magazine, novel): ");
scanf("%s", &temp->chType);
printf("Enter book publisher (eg. UTA): ");
scanf("%s", &temp->chPublisher);
printf("Enter book's number of pages: ");
scanf("%d", &temp->nPages);
printf("Enter book's price: ");
scanf("%f", &temp->nPrice);
printf("Enter year published: ");
scanf("%d", &temp->nPubYear);
//temp->next=NULL;
if (head == NULL)
{
head = temp;
temp->next = NULL;
}
else{
temp->next = head;
head = temp;
}
//BOOK[count].nStatus = IN;
count++;
}
else
{
printf("\nSorry another book with that id: Try again!\n" );
addBookFunction();
}
}
int checkID(int t)
{
BOOK *head;
while (head != NULL)
{
if (head->nID == t)
return 1;
head = head->next;
}
return 0;
}
答案 0 :(得分:0)
在您的地方,一个简单的解决方法就是通过您的图书馆藏书#34;到您的AddBook方法:
void addBook(BOOK *libraryBooks)
int checkID(BOOK *libraryBooks, int t)
然后删除您的变量声明' head'。改变所有人的头脑'通过' libraryBooks'并将变量传递给checkID。
在此功能之上,您必须管理您的图书馆。
答案 1 :(得分:0)
checkID()
和addBook()
可能都应该接受链接列表的头部作为附加参数。在head
中遍历您的链接列表的checkID()
指针看起来好像在使用适当的值初始化之前就已经习惯了。你可能已经没有遇到空指针异常,这可能只是幸运的偶然事件。