Напишите программу, которая вставляет строки, введенные с клавиатуры, в список - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Ребята, всем привет! Задание было такое "Напишите программу, которая вставляет строки, введенные с клавиатуры, в список" Нужно было использовать функция gets(), вот с ней мне кажется у меня и проблема. Почему то во все элементы списка добавляется только строка, которая была введена последней/ Помогите разобраться list.h
typedef struct Node Node;
typedef struct List List;
struct Node{
   char* string;
   struct Node* next;
};
 
struct List{
   struct Node *first;
 }List_;
list.c
List* create_list(void){
    List* List_ = (List*) malloc(sizeof(List));
    List_->first = NULL;
    List_->sz = 0;
    return List_;
}
 
Node* new_elem(void) {
    Node *elem = (Node*) malloc(sizeof(Node));
    elem->next = NULL;
    return elem;
}
void insert_elem(char* str)
{
    Node* elem = new_elem();
 
    if (NULL == List_.first){
        List_.first = elem;
    }
    Node* curr = List_.first;
    while (NULL != curr->next)
        curr = curr->next;
    
    curr->next = elem;
    elem->next = NULL;
    elem->string =(char*)malloc(sizeof(char)*(strlen(str)+1));
    elem->string = str;
}

void printlist(void) {
    Node* curr = List_.first;
    int i;
    //for (i = 0; i < List_.sz; i++) {
    while(NULL != curr){
        printf("%s\n",curr->string);
        curr = curr->next;
    }
}
main.c
#include "list.h"
 
int main(void)
{
    List* List_ = create_list();
    char st[256];
    
    gets(st);
    insert_elem(st);
    
    gets(st);
    insert_elem(st);

    gets(st);
    insert_elem(st);

    printlist();
 
    return 0;
}

Решение задачи: «Напишите программу, которая вставляет строки, введенные с клавиатуры, в список»

textual
Листинг программы
elem->string = str;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.929 из 5
Похожие ответы