queue in c我的代码或算法中的一些问题?

时间:2018-02-27 18:12:52

标签: c stack queue

如何在c中制作堆栈,程序不会仅输出所有输入的字符串 发生了什么?不知道该写什么,但网站要求写一些东西,认为没有任何解释。当我想借助下一本书的链接打印所有书籍时,它只输出最后输入的东西。是覆盖吗?

#include <stdio.h>
#include <string.h>

typedef struct book book;

struct book{
    book *next;
    char name[100];
    int year;
    char author[100];
};

void setter(book *aza, int number){
    char name[100];
    int year;
    char author[100];

    scanf("%s", name);
    scanf(" %d", &year);
    scanf("%s", author);

    strcpy( aza->name , name );
    aza->year = year;
    strcpy( aza->author, author );

    number--;

    if(number==0){
        return;
    }else{
        setter(&aza->next, number);
    }
}

printBooks(book *aza){
    if(aza){
         printf("%s\n", &aza->name);
         printBooks(&aza->next);
    }
}

int main()
{
    book kitap;
    int number;

    scanf("%d", &number);
    setter(&kitap, number);
    printBooks(&kitap);

    return 0;
}

1 个答案:

答案 0 :(得分:1)

setter(&aza->next, number);

这是问题的根源 - next指向哪里?它包含一些无处可寻的垃圾值。尝试访问它是未定义的行为。这就是你所做的。

分配内存并将其传递给setter - 另一方面,它试图访问一些随机内存并尝试在其中设置值。您可以使用malloc分配内存并使此结构实例的next指向它。

为了帮助你改变一下: -

    aza->next = malloc(sizeof *(aza->next));
    setter(aza->next, number);

同样位于printBooks因为scanf期望char*不是char (*)[],而且printBooks函数应该采用book*

     printf("%s\n", aza->name);
     printBooks(aza->next);

使用一些代码的插图 - here。此外,您还需要编写函数来释放除第一个结构实例之外的所有这些内存。