Мне нужна помощь с перезаписью моего кода предыдущих входов, которые были сохранены в моем связанном списке.Этот проект намного больше, чем у меня здесь, но я не могу продолжать, пока не выясню эту проблему.Так, скажем, пользователь вводит «ins mom», «ins dad», «ins bob», если он выполняет команду «prl», он выведет «bob bob bob».Получается правильное количество узлов, но последняя введенная команда ins всегда заполняет список и перезаписывает предыдущие элементы.Я потратил некоторое время, пытаясь это исправить, но все еще не могу понять это.Кто-нибудь может мне помочь?
struct node{
char *symbol;
int count;
struct node *next;
};
int main(void){
void insert_node(struct node**,struct node**,char*,int);
void print_list(struct node*);
struct node *head,*tail;
char command[MAX];
char word[MAX];
int i = 1;
head = tail = NULL;
printf("Command? ");
scanf("%s",command);
if((strcmp(command,"prl")==0))
{
printf("The list is empty.");
printf("Command? ");
scanf("%s",command);
}
else{
scanf("%s",word);
}
while((strcmp(command,"end") != 0))
{
if((strcmp(command,"ins")== 0))
{
insert_node(&head,&tail,word,i);
}
printf("Command? ");
scanf("%s",command);
if((strcmp(command,"prl")==0))
{
print_list(head);
}
else{
scanf("%s",word);
}
}
return 0;
}
void insert_node(struct node**h,struct node**t,char w[],int c) //inserts string into the list
{
struct node *temp;
if((temp = (struct node *)malloc(sizeof(struct node))) == NULL){
printf("Node allocation failed. \n");
exit(1);
}
temp->count = c;
temp->symbol = w;
temp->next = NULL; //edited this in
if(*h == NULL)
{
*h = *t = temp;
}
else{
(*t)->next = temp; *t = (*t)->next;
}
}
void print_list(struct node *h){ //prints the list
if(h == NULL){
printf("The list is empty.\n");
}
else{
while(h != NULL)
{
printf("%d %s\n",h->count,h->symbol);
h = h->next;
}
}
}