我对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;
}
}
我的程序把当前的节点->id打印出来,就好像它是当前的节点->副本,而当前的节点->副本打印出来是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 *newAlbum
比sizeof(struct list)
好一点,因为前者在读取行时是“明显正确的”—如果newAlbum
的类型发生变化,它仍然是正确的)。关于c - C,从链接列表中打印多个整数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4393957/