Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
patrikeev
0 / 0 / 0
Регистрация: 04.07.2013
Сообщений: 4
1

Напишите программу, которая вставляет строки, введенные с клавиатуры, в список

20.02.2014, 11:16. Просмотров 1152. Ответов 4
Метки нет (Все метки)

Ребята, всем привет!
Задание было такое
"Напишите программу, которая вставляет строки, введенные с клавиатуры, в список" Нужно было использовать функция gets(), вот с ней мне кажется у меня и проблема. Почему то во все элементы списка добавляется только строка, которая была введена последней/ Помогите разобраться

list.h
C
1
2
3
4
5
6
7
8
9
10
typedef struct Node Node;
typedef struct List List;
struct Node{
   char* string;
   struct Node* next;
};
 
struct List{
   struct Node *first;
 }List_;
list.c
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#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;
}
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2014, 11:16
Ответы с готовыми решениями:

Напишите программу, которая проверяет, является ли введенная с клавиатуры строка дробным числом
Напишите программу, которая проверяет, является ли введенная с клавиатуры строка дробным числом.

Напишите программу, которая проверяет, образуют ли элементы введенного с клавиатуры массива неубывающую последовательность
Напишите программу, которая проверяет, образуют ли элементы введенного с клавиатуры массива...

Напишите программу, которая считывает с клавиатуры три числа, разделенных пробелами и печатает их сумму
Помогите пожалуйста записать эту программу...:help: &quot;Напишите программу, которая считывает с...

Напишите программу, которая позволяет ввести с клавиатуры целое число n, и выводит на экран структуру из чередующихся 0
Собственно по теме,помогите пожалуйста с данной программой,и желательно с небольшими пояснениями....

Напишите программу, которая выводит последнее слово переданной её символьной строки
Напишите программу, которая выводит последнее слово переданной её символьной строки.

4
Fonduee
Музыка нас Связала
231 / 231 / 52
Регистрация: 26.03.2008
Сообщений: 616
20.02.2014, 11:24 2
Не присваивай значения, а копируй.
0
patrikeev
0 / 0 / 0
Регистрация: 04.07.2013
Сообщений: 4
20.02.2014, 13:27  [ТС] 3
Я тебя не совсем понял)
0
Fonduee
Музыка нас Связала
231 / 231 / 52
Регистрация: 26.03.2008
Сообщений: 616
20.02.2014, 14:02 4
Лучший ответ Сообщение было отмечено patrikeev как решение

Решение

C
1
elem->string = str;
Присваиваешь только поинтер; А нужно скопировать в elem->string саму строку, а не поинтер на нее (strcpy). Иначе значение того, куда он указывает, меняется всегда на последнию считаную строку.
1
patrikeev
0 / 0 / 0
Регистрация: 04.07.2013
Сообщений: 4
20.02.2014, 15:14  [ТС] 5
Спасибо большое тебе)
0
20.02.2014, 15:14
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2014, 15:14

Напишите программу, которая выводит последнее слово переданной ей символьной строки
Почему не работает этот код? #include &lt;stdio.h&gt; #include &lt;string.h&gt; int main() { char arr;...

Написать программу, которая читает с клавиатуры строки
Написать программу, которая читает с клавиатуры строки (максимальный размер строк-50 символов)....

Составить программу, которая вводит с клавиатуры три строки
Составить программу, которая вводит с клавиатуры три строки, содержащие до 75 символов, и выводит...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.