gpt4 book ai didi

c - c 中的队列 我的代码或算法有问题吗?

转载 作者:行者123 更新时间:2023-11-30 14:50:25 25 4
gpt4 key购买 nike

如何在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;
}

最佳答案

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 。此外,您还需要编写函数来释放除第一个结构实例之外的所有这些内存。

关于c - c 中的队列 我的代码或算法有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49015294/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com