Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
#1

Не выводится содержимое динамического списка - C++

14.10.2012, 14:38. Просмотров 1576. Ответов 40
Метки нет (Все метки)

доброго времени суток.
структура с типом стринг, трем элементам структуры присваивается значение потом при попытки вывести одно из значений, тоесть обратится к списку через указатель выдает ошибку в строке вывода.
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
#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include <tchar.h>
#include <string.h>
//---------------------------------------------------------------------------
 
struct lfile{
string name;
string data;
string upd;
    lfile*next;
}*start,*p;
void create_list(string a,string b,string c){
p = new lfile;
p->name=a;
p->data=b;
p->upd=c;
p->next = NULL;
start = p;
return;
}
char main(){
 setlocale(LC_ALL, "rus");
string a,b,c;
printf("Введите значение для первого элемента, создаваемого списка: ");
a="kot";
b="dog";
c="got";
cout<<p->name; \\ вот тут выдает ошибку
return 0;
}
ошибка такая [BCC32 Error] probstrukt.cpp(32): E2094 'operator<<' not implemented in type 'ostream' for arguments of type 'string'
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2012, 14:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не выводится содержимое динамического списка (C++):

Не выводится на экран элемент динамического массива - C++
Здравствуйте! Сразу прошу прощения за название темы, т.к. далее по тексту вы узнаете, что проблема относится не совсем к выводу на экран...

Не выводится содержимое массива - C++
Привет ребята! Задали такую задачку, код написал, но видать где-то косяк, массив из значений не выводит, а s2,k2,k3,p - выводит вот код...

А чего не выводится содержимое вектора? - C++
Здравствуйте. Новичок. Задача: Написать функцию которая считывает слова из входного потока и сохраняет их в векторе. Я придумал...

Выводится содержимое переменной, а не адрес - C++
Тип char. Почему выводится содержимое? pAdd-&gt;name=a.taskName; cout&lt;&lt;&amp;a.taskName&lt;&lt;endl;

Обмен элементов динамического списка - C++
Народ помогите кто как может или литературы полезной скиньте, что то читал читал, а толку нету. необходимо создать однонаправленный...

Структура в виде динамического списка - C++
Доброе время суток. Есть программа #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;locale.h&gt; #include &lt;windows.h&gt; #include...

40
BumerangSP
4286 / 1408 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
16.10.2012, 18:39 #31
Nixy, к чему это? Должно быть правильно сразу, а не проще. Первым ввели, последним вышло. Это принцип LIFO и не нужно его менять, пусть даже и визуально.

Добавлено через 2 минуты
Когда мы говорим про список, мы подразумеваем список. Он бывает односвязным еще, или кольцевым, а не только двусвязным, похожим на очередь.
0
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
16.10.2012, 18:43 #32
фактически я так и делаю, вы тогда разверните цикл, ведь я и говорю ,что первым кто вошел, у него номер ячейки 0 , а цикл выводит от 0 до 4 поэтому и разворот, выводи от 4 до 0 тогда будет как у стека, я сделал процедуру просто взятия элемента из стека, а не совсем вывода, а про списки, значит забыл, возможно тогда и вы правы, тут спорить не буду, но мой стек работает )
1
BumerangSP
4286 / 1408 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
16.10.2012, 18:55 #33
Nixy,
просто взятия элемента из стека, а не совсем вывода
Берем и выводим. Т.е. манипуляция с элементов была, а это значит, что его необходимо убрать, т.е. удалить.
что первым кто вошел, у него номер ячейки 0 , а цикл выводит от 0 до 4 поэтому и разворот, выводи от 4 до 0 тогда будет как у стека
Все вроде верно, но вот суть я не уловил) У первого индекс 0, у последнего 3. Выводим, начиная с конца. Т.е. первыми должны быть последние 3 введенных элемента.

Это ладно, суть не в этом. Просто я хотел указать на то, как работает стек. ТС все равно по условию нужен динамический список.
0
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
21.10.2012, 11:59  [ТС] #34
доброго времени суток всем, читал на сайте про динамический список от туда взял пару функций чуть подправил пытался понять, но все равно не запускается и дает ошибки, кроме того я не знаю как грамотно выстраить обращение к функции в части main
сейчас вот так вот выглядит программа, маин не отридактираванно осталось от прежнего но ошибки уже выдает не до ходя до маина в функция подскажите почему не правильно я просто не очень еще это понимаю
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include <tchar.h>
#include <string>
//---------------------------------------------------------------------------
#include <conio.h>
struct lfile{
char name;
char date;
lfile*next;};
struct golovahvost {
        lfile* head; // Первый элемент (голова) списка
        lfile* tail; // Последний элемент (хвост) списка
    };
 // Создание пустого списка
void constr_list(golovahvost  &l)
{
    l.head = NULL;
}
// Проверка списка на пустоту
bool chk_empty(golovahvost  &l)
{
    return (l.head==NULL);
}
 // Включение в список нового компонента
void comp_in(golovahvost &l, char* n, char* v)
{
    lfile* c = new lfile();
    strcpy_s(c->name, 20, n);
    strcpy_s(c->date, 10, v);
    c->next = NULL;
    if (chk_empty(l))
        l.head = c;
    else
        l.tail->next = c;
    l.tail = c;
}
// Поиск компонента в списке по имени
lfile* search(golovahvost &l, char *n)
{
    while (l.head != NULL)
    {
        if (!strcmp(l.head->name,n))
            return l.head;
        l.head = l.head->next;
    }
    return l.head;
}
 
main(){
setlocale(LC_ALL, "rus");
golovahvost vars; // Динамический список
constr_list(vars);
char a,b,c;
cout<<"Vvedite znachenie pervogo elementa v sozdavaemom spiske: "<<endl;
cin>>a>>b;
void comp_in(golovahvost &l, char* a, char* b)
create_list(a,b,c);
cout<<endl<<"vvedite eshe element: ";
cin>>a>>b>>c;
new_element(a,b,c);
cout <<"pervi element"<<endl<<cout<<p->name<<endl<<p->data<<endl<<p->upd;
 
cout<<"vtoroi element"<<endl<<p->next->name<<endl<<p->next->data<<endl<<p->next->upd;
getch();
return 0;
}
0
BumerangSP
4286 / 1408 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
21.10.2012, 13:03 #35
lexflax, вместо strcpy просто присваивайте, это ж символы. И раз уж символ передается через указатели, то * нужно писать каждый раз перед ними.
Ну, и не объявленные функции, которые используются в main, тоже есть, типа create_list().
0
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
21.10.2012, 13:20  [ТС] #36
вот сейчас так выглядит код, компилируется, но как организовать main не знаю, по сути дело должно быть меню чтоб можно было добавить елемент в список, удалить , посмотреть весь список на экране ну и так далее ну вот те функции что есть чтоб можно было к ним обратится и видно было что они применяются...
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include <tchar.h>
#include <string>
//---------------------------------------------------------------------------
#include <conio.h>
struct lfile{
char name;
char date;
lfile*next;};
struct golovahvost {
        lfile* head; // Первый элемент (голова) списка
        lfile* tail; // Последний элемент (хвост) списка
    };
 // Создание пустого списка
void constr_list(golovahvost  &l)
{
    l.head = NULL;
}
// Проверка списка на пустоту
bool chk_empty(golovahvost  &l)
{
    return (l.head==NULL);
}
 // Включение в список нового компонента
void comp_in(golovahvost &l, char n, char v)
{
    lfile* c = new lfile();
    c->name= n;
    c->date= v;
    c->next = NULL;
    if (chk_empty(l))
        l.head = c;
    else
        l.tail->next = c;
    l.tail = c;
}
// Поиск компонента в списке по имени
lfile* search(golovahvost &l, char n)
{
    while (l.head != NULL)
    {
        if (l.head->name!=n)
            return l.head;
        l.head = l.head->next;
    }
    return l.head;
}
 
main(){
setlocale(LC_ALL, "rus");
golovahvost vars; // Динамический список
constr_list(vars);
char a,b,c;
cout<<"Vvedite znachenie pervogo elementa v sozdavaemom spiske: "<<endl;
cin>>a>>b;
void comp_in(golovahvost &l, char* a, char* b);
cout<<endl<<"vvedite eshe element: ";
cin>>a>>b;
getch();
return 0;
}
0
BumerangSP
4286 / 1408 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
21.10.2012, 13:59 #37
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <vcl.h>
#pragma hdrstop
#include<iostream>
#include <tchar.h>
#include <string>
//---------------------------------------------------------------------------
#include <conio.h>
 
struct lfile{
char name;
char date;
lfile*next;};
struct golovahvost {
        lfile* head; // Первый элемент (голова) списка
        lfile* tail; // Последний элемент (хвост) списка
    };
 // Создание пустого списка
void constr_list(golovahvost  &l)
{
    l.head = NULL;
}
// Проверка списка на пустоту
bool chk_empty(golovahvost  &l)
{
   if (l.head==NULL) 
    return true;
   else
    return false;
}
 // Включение в список нового компонента
void comp_in(golovahvost &l, char n, char v)
{
    lfile* c = new lfile;
    c->name= n;
    c->date= v;
    c->next = NULL;
    if (chk_empty(l))
        l.head = c;
    else
        l.tail->next = c;
    l.tail = c;
}
// Поиск компонента в списке по имени
llfile* search(golovahvost &l, char n)
{
    while (l.head != NULL)
    {
        if (l.head->name==n) //нужно учесть, что ищет он только по одному полю name
            return l.head;
        l.head = l.head->next;
    }
 cout<<"element not found"<<endl;  
 getch(); 
 exit(1);
}
 
void print(golovahvost l)
{
 while (l.head)
  {
   cout<<l.head->name<<" "<<l.head->date<<" ";
   l.head=l.head->next;
  }
}
 
main(){
setlocale(LC_ALL, "rus");
golovahvost vars; // Динамический список
constr_list(vars);
char a,b,c;
cout<<"Vvedite znachenie pervogo elementa v sozdavaemom spiske: "<<endl;
cin>>a>>b;
comp_in(vars, a, b);
cout<<endl<<"vvedite eshe element: ";
cin>>a>>b;
comp_in(vars, a, b);
print(vars);
cout<<"\nElement for search:  ";
cin>>a;
lfile* el=new lfile;
el=search(vars,a);
cout<<el->name;
cout<<" Adress: "<<el<<endl;
 
getch();
return 0;
}
1
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
21.10.2012, 16:29  [ТС] #38
Цитата Сообщение от BumerangSP Посмотреть сообщение
cout<<el->name;
cout<<" Adress: "<<el<<endl;
выводит адрес как я понял какой то... а как именно содерживое вывести?
0
BumerangSP
4286 / 1408 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
21.10.2012, 16:36 #39
lexflax, выводит содержимое (cout<<el->name) и его адрес (cout<<" Adress: "<<el<<endl).
0
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
21.10.2012, 16:43  [ТС] #40
при поиске выводит имя первого элемента , а ввожу найти имя второго элемента
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
struct lfile{
char name;
char date;
lfile*next;};
struct golovahvost {
        lfile* head; // Первый элемент (голова) списка
        lfile* tail; // Последний элемент (хвост) списка
    };
 // Создание пустого списка
void constr_list(golovahvost  &l)
{
    l.head = NULL;
}
// Проверка списка на пустоту
bool chk_empty(golovahvost  &l)
{
    return (l.head==NULL);
}
 // Включение в список нового компонента
void comp_in(golovahvost &l, char n, char v)
{
    lfile* c = new lfile();
    c->name= n;
    c->date= v;
    c->next = NULL;
    if (chk_empty(l))
        l.head = c;
    else
        l.tail->next = c;
    l.tail = c;
}
// Поиск компонента в списке по имени
lfile* search(golovahvost &l, char n)
{
    while (l.head != NULL)
    {
        if (l.head->name!=n)
            return l.head;
        l.head = l.head->next;
    }
    return l.head;
}
 
main(){
setlocale(LC_ALL, "rus");
golovahvost vars; // Динамический список
constr_list(vars);
char a,b;
lfile*k=new lfile;
cout<<"Vvedite znachenie pervogo elementa v sozdavaemom spiske: "<<endl;
cin>>a>>b;
comp_in(vars,a,b);
cout<<endl<<"vvedite eshe element: ";
cin>>a>>b;
comp_in(vars,a,b);
cout<<"naiti"<<endl;
cin>>a;
k=search(vars,a);
cout<<k->name;
getch();
return 0;
}
0
BumerangSP
4286 / 1408 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
21.10.2012, 18:05 #41
lexflax, потому что что это за условие такое?
C++
1
2
if (l.head->name!=n)
            return l.head;
Естественно, первый элемент, не равный n, выйдет.
Должно быть ==.
А также если элемент не найден, то:
C++
1
return l.head;
Что тут должно быть присвоено k?

Я ж вроде все уже сделал в предыдущем коде, к чему на те же грабли опять наступать?
0
21.10.2012, 18:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2012, 18:05
Привет! Вот еще темы с ответами:

Создать шаблон динамического списка - C++
спроектировать шаблон для класса динамический список Создать конструкторы: по умолчанию, с параметрами и копирования и продемонстрировать...

Абстрактный класс динамического списка - C++
Как создать из класса динамического списка - абстрактный? Ну ясно что абстрактный класс - это класс с чистой виртуальной функцией. ...

Поместить в стек из динамического списка - C++
У меня такая задача: Последовательность вещественных чисел сохранить в динамическом списке. Поместить в стек все отрицательные числа,...

Сортировка динамического линейного списка - C++
Подскажите пожалуйста как вывести список книг изданных после указанного года.Я уже все пересмотрела везде только добавить -удалить.Это я...


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

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

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