リンク リストの各ノードにインデックス (コード)、アーティスト名、アルバム タイトルが含まれるアルバム カタログを作成しようとしています。ただし、何らかの理由で、リストを印刷しようとするたびに、各ノードに割り当てた正しいインデックスが表示されますが、表示されるアーティストとタイトルは、すべてのアイテムについて、私が入力したものになります最後のノード。つまり、1 つのノードに '1, Oasis and Definetely_Maybe' を入力し、2 番目のノードに '5, Aerosmith and Pump' を入力した場合、print_list を実行すると、次のように表示されます。
Code: 1
Artist: Aerosmith
Album: Pump
と
Code: 5
Artist: Aerosmith
Album: Pump
どういうわけか、最初のノードのアーティストとアルバムのタイトルが最後のノードで上書きされます。実行を終了する前に入力したノードの数に関係なく発生します。
これが非常に初心者であることは理解していますが、プログラミングを始めたばかりなので、助けていただければ幸いです。コードは次のとおりです。どうもありがとう。
#include <stdio.h>
#include <stdlib.h>
#define MAX 100
typedef struct n {int code; char *artist; char *album; struct n* next;} Node;
void start_list (Node **first);
Node *create_node (int code, char *art, char *alb);
void insert_list (Node **first, Node *next);
void print_list (Node *p);
void exit_list (Node **p);
int main(int argc, char *argv[])
{
Node *first;
Node *new;
int n;
char artist[MAX];
char album[MAX];
start_list(&prim);
do{
printf("Please enter a number for the next Node or 0 to exit the list: ");
scanf("%d",&n);
if(n==0)break;
printf("\nNow enter the artist's name: ");
scanf("%s",&artist);
printf("\nType the album tytle now: ");
scanf("%s",&album);
printf("\n\nCode: %d ",n);
printf("\nArtist: %s ",artist);
printf("\nAlbum: %s \n",album);
new=create_node(n,artist,album);
insert_list(&first,new);
}while(n!=0);
print_list (prim);
exit_list(&prim);
system("PAUSE");
return 0;
}
void start_list (No **prim){
*prim=NULL;
}
Node *create_node (int code, char *art, char *alb){
Node *new;
new=(Node*)malloc(sizeof(Node));
new->code=code;
new->artist=art;
new->album=alb;
new->next=NULL;
return new;
}
void insert_list (Node **first, Node *new){
new->next=*first;
*first=new;
}
void print_list (Node *p){
Node *aux=p;
while (aux!=NULL){
printf("\n\nCode: %d ",aux->code);
printf("\nArtist: %s ",aux->artist);
printf("\nAlbum: %s \n",aux->album);
aux=aux->next;
}
}
void exit_list (Node **p){
Node *aux=*p;
while(aux!=NULL){
*p=(*p)->next;
free(aux);
aux=*p;
}
}