gpt4 book ai didi

C、打印链表中的多个整数

转载 作者:太空宇宙 更新时间:2023-11-04 03:06:26 24 4
gpt4 key购买 nike

我是 C 语言的新手,所以我不太确定这是怎么回事。我不知道如何在函数中打印多个整数值。

添加函数:

void add(char *name,int id,int copies)
{
/* Pointer to next item */
struct list *newAlbum;

newAlbum = malloc(sizeof(struct list));
strcpy((*newAlbum).name, name); // Set album name
newAlbum->id = id;
newAlbum->copies = copies;
newAlbum->pNext = pFirst;
pFirst = newAlbum;
}

显示函数:

void show()
{
system("clear");
struct list *current_node;
current_node = pFirst;
while(current_node != NULL)
{
printf("Album #%d \n",current_node->id);
printf("Album Name: %s \n",current_node->name);
printf("Album Copies:%d \n",current_node->copies);
printf("\n");
current_node=current_node->pNext;
}
}

我的程序打印出 current_node->id 就好像它是 current_node->copies,而 current_node->copies 打印出 134516043,这显然是错误的。

我想我一定是向函数传递了一些错误的东西,但我想不通。有什么建议吗?

我这样调用函数add:

add(name,id,copies);

列表如下:

 /* THE LIST */
struct list{
char name[52];
int id;
int copies;
int sold;
struct list* pNext;
};
struct list *pFirst = NULL;

我用这段代码调用用户输入的函数:

printf("Enter the name of the new album. \n");
scanf("%s",&name);
printf("Enter the album id. \n");
scanf("%d",&id);
printf("Enter number of copies. \n");
scanf("%d," &copies);
// Pass data to add()
add(name,id,copies);

最佳答案

只要您不将长度超过 51 个字符的相册名称传递给 add(),您显示的代码就可以。如果这样做,您将得到非常奇怪的输出,并且可能会发生崩溃。

为了防止这种情况,您应该使用长度受限的副本 - 例如:

void add(char *name,int id,int copies)
{
/* Pointer to next item */
struct list *newAlbum;

newAlbum = malloc(sizeof *newAlbum);
if (newAlbum) {
snprintf(newAlbum->name, sizeof newAlbum->name, "%s", name); // Set album name
newAlbum->id = id;
newAlbum->copies = copies;
newAlbum->pNext = pFirst;
pFirst = newAlbum;
}
}

(注意 sizeof *newAlbumsizeof(struct list) 好一点,因为前者在阅读该行时“显然是正确的” - 它仍然会如果 newAlbum 的类型发生变化,则为正确)。

关于C、打印链表中的多个整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4393957/

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