我对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 *newAlbumsizeof(struct list)好一点,因为前者在读取行时是“明显正确的”—如果newAlbum的类型发生变化,它仍然是正确的)。

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

10-17 00:28