C:使用链表向结构添加数据

时间:2014-12-09 01:50:32

标签: c linked-list

我是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;
}

2 个答案:

答案 0 :(得分:0)

不用担心!这很正常!每次添加图书时,您都在创建新的图书库! :)

在您的地方,一个简单的解决方法就是通过您的图书馆藏书#34;到您的AddBook方法:

void addBook(BOOK *libraryBooks)
int checkID(BOOK *libraryBooks, int t)

然后删除您的变量声明' head'。改变所有人的头脑'通过' libraryBooks'并将变量传递给checkID。

在此功能之上,您必须管理您的图书馆。

答案 1 :(得分:0)

checkID()addBook()可能都应该接受链接列表的头部作为附加参数。在head中遍历您的链接列表的checkID()指针看起来好像在使用适当的值初始化之前就已经习惯了。你可能已经没有遇到空指针异常,这可能只是幸运的偶然事件。