Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的链表_C_Linked List - Fatal编程技术网

C语言中的链表

C语言中的链表,c,linked-list,C,Linked List,我还是C语言的新手,我遇到了一个大问题。。。 首先,我想向您展示我在列表中插入项目的代码: void input_books_info(int number_of_books, BOOK *current) { int i; for(i = 0; i < number_of_books; i++) { while(current->next != NULL) current = current->next;

我还是C语言的新手,我遇到了一个大问题。。。 首先,我想向您展示我在列表中插入项目的代码:

void input_books_info(int number_of_books, BOOK *current)
{
    int i;
    for(i = 0; i < number_of_books; i++)
    {
        while(current->next != NULL)
            current = current->next;


        current->next = (BOOK *)malloc(sizeof(BOOK));

        printf_s("%d book catalog number: ", i + 1);
        scanf_s("%s", &current->next->catalog_number , 20);
        printf_s("%d book title: ", i + 1);
        scanf_s("%s", current->next->title ,80);
        printf_s("%d book author: ", i + 1);
        scanf_s("%s", current->next->author ,40);
        printf_s("%d book publisher: ", i+1);
        scanf_s("%s", current->next->publisher,80);
        printf_s("%d book price: ", i + 1);
        scanf_s("%f", &current->next->price, 5);
        printf_s("%d book year published: ", i + 1);
        scanf_s("%d", &current->next->year_published, 5);

        current->next->next = NULL;
        printf_s("\n\n");
    }



}
最后可能是打印功能的问题:

void main (void)
{
    int number_of_books, t = 1;
    char book_catalog_number[STRMAX];
    char book_title[STRMAX];
    char book_author[STRMAX];
    char reading_file[STRMAX];
    char saving_file[STRMAX];


    first = malloc(sizeof(BOOK));
    first->next = NULL;
    /*
    printf_s("Enter file name: "); gets(saving_file);
    first->next = book_open(first, saving_file);
    */
    while(t)
    {
        char m;
        printf_s("1. Input \n0. Exit \n\n");
        printf_s("Choose operation: ");
        m = getch();





        switch(m)
        {
            case '1':
                printf_s("\ninput number of books: ");
                scanf_s("%d", &number_of_books);
                input_books_info(number_of_books, first);
                printf_s("\n");
            break;


            default:
                printf_s("\nNo entry found!\n\n\n\n\n");
                break;
        }

    }

}
void print_books_info(BOOK *current)
{
    while(current->next != NULL && current != NULL)
    {

        printf_s("%s, ", current->next->catalog_number);
        printf_s("%s, ", current->author);
        printf_s("%s, ", current->next->title);
        printf_s("%s, ", current->next->author);
        printf_s("%s, ", current->next->publisher);
        printf_s("%.2f, ", current->next->price);
        printf_s("%d", current->next->year_published);
        printf_s("\n\n");
        current = current->next;
    }

}

我的问题是,当我运行应用程序时,程序运行得很好。但当我启动应用程序时,程序只存储第一次输入的数据,第二次和第三次数据丢失。。。你能帮我弄明白吗

我怀疑是扫描程序读取了比预期更多的字段。相反,使用单个scanf_s将整行读取到缓冲区中,然后使用sscanf_s解析缓冲区

另外,由于你们并没有展示书的声明,我们都有点盲目地拍摄,但书中的元素尺寸是否正确?如果不是,则在读取期间会有元素覆盖。这本书应该是这样的:

class BOOK {
        BOOK   *next;
        char   catalog_number [20];  // at least 20 chars
        char   title [80];
        char   author [40];
        char   publisher [80];
        double price;
        int    year_published;
};

在print_books_info中,您应该在while条件下选中
current
之前的
current->next
。您可以发布您用于书本的结构吗?问题是如何表现出来的?换句话说,你怎么知道第二本和第三本书“不见了”?“失踪”是什么意思?你能告诉我们你是如何给我们打电话的吗?
print\u books\u info
。如果我删除所有scanf并用cin(仅限C++)替换它们,您的代码就可以正常工作。我还建议使用getchar()而不是getch()。