С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 08.03.2017
Сообщений: 11

Прочитать список структур

16.10.2017, 19:00. Показов 521. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Имеется две структуры


C++
1
2
3
4
5
6
7
8
9
10
11
12
struct structure
{
    std::string album;
    std::string singer;
    int date;
    int songs;
    structure* next;
};
struct dyn_list {
    structure* head; // Первый элемент (голова) списка
    structure* tail; // Последний элемент (хвост) списка
};

Как мне правильно прочитать все записи из структуры?

C++
1
2
3
4
5
6
7
8
9
10
11
12
void CASE2(dyn_list l) //Что принимать?
{
    while (l.head != NULL)
    {
        std::cout << "Album name:" << l.head->album << std::endl;
        std::cout << "Singer:" << l.head->singer << std::endl;
        std::cout << "Release date:" << l.head->date << std::endl;
        std::cout << "Number of songs:" << l.head->songs << std::endl;
        CASE2(l.head->next); //Что передавать?
    }
 return;
}
И как мне правильно из main() вызывать CASE2() ?

Заранее спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.10.2017, 19:00
Ответы с готовыми решениями:

Прочитать данные из файла и занести их в массив структур
Программа должна с файла считать данные и занести их в массив. #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string&gt; ...

Прочитать из текстового файла данные в массив структур
Структура типа: Фамилия,логин,пароль,роль(администратор, модератор, простой пользователь) Не могу понять как прочитать из текстового...

Заменить массив структур на односвязный список, и на двусвязный список
Взять текст задания и заменить массив структур на односвязный список, и на двусвязный список using namespace std; class person { ...

10
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943
16.10.2017, 19:16
вызываешь как обычную функцию
C++
1
2
3
4
5
6
7
8
9
10
11
12
void CASE2()
{
    struct structure *p = head // присваеваем начальное значения(точнее адрес откуда и будем начинать)
    while (p != NULL)
    {
        std::cout << "Album name:" << p->album << std::endl;
        std::cout << "Singer:" << p->singer << std::endl;
        std::cout << "Release date:" << p->date << std::endl;
        std::cout << "Number of songs:" << p->songs << std::endl;
        p = p -> next; // бегаем по списку пока это возможно
    }
}
0
0 / 0 / 0
Регистрация: 08.03.2017
Сообщений: 11
16.10.2017, 21:24  [ТС]
Спасибо, no swear, за ответ.

Но у меня выдает ошибку:
идентификатор "head" не определен
(строчка 3)
0
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943
16.10.2017, 22:20
Эхх дурная голова Так чтобы обращаться ко второй структуре надо создать объект этой структуры
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
#include <conio.h>
#include <stdio.h>
#include <algorithm>
 
struct structure
{
    std::string album;
    std::string singer;
    int date;
    int songs;
    structure* next;
};
 
struct dyn_list
{
    structure* head; // Первый элемент (голова) списка
    structure* tail; // Последний элемент (хвост) списка
};
 
void CASE2()
{
    struct dyn_list q; // Это нужно чтобы обращаться к указателям dyn_list
    struct structure *p = q.head; // присваеваем начальное значения(точнее адрес откуда и будем начинать)
    while (p != NULL)
    {
        std::cout << "Album name:" << p -> album << std::endl;
        std::cout << "Singer:" << p -> singer << std::endl;
        std::cout << "Release date:" << p -> date << std::endl;
        std::cout << "Number of songs:" << p -> songs << std::endl;
        p = p -> next; // бегаем по списку пока это возможно
    }
}
 
int main()
{
    CASE2();
    return 0;
}
1
0 / 0 / 0
Регистрация: 08.03.2017
Сообщений: 11
16.10.2017, 22:25  [ТС]
Выдаёт ошибку использована неинициализированная локальная переменная "q"


В строке
struct structure *p = q.head;
0
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943
16.10.2017, 22:31
У меня ошибка в cout выходит что конечно естественно. Скиньте код полностью
1
0 / 0 / 0
Регистрация: 08.03.2017
Сообщений: 11
16.10.2017, 23:17  [ТС]
В 3ем кейсе я должен поиск по структуре произвести. Он еще не дописан(совсем).
Задание- добавлять данные в файл, читать их, производить поиск.
Всё это делать с помощью списка.




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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
// ConsoleApplication1.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <stdio.h>
#include <tchar.h>
#include <iostream>
#include <string>
#include <fstream>
#include <stdlib.h>
#include <ctype.h>
//не все библиотеки нужны
 
 
 
 
struct structure
{
    std::string album;
    std::string singer;
    int date;
    int songs;
    structure* next;
};
struct dyn_list {
    structure* head; // Первый элемент (голова) списка
    structure* tail; // Последний элемент (хвост) списка
};
 
 
 
// Создание пустого списка
void constr_list(dyn_list &l)
{
    l.head = NULL;
}
// Проверка списка на пустоту
bool chk_empty(dyn_list l)
{
    return (l.head == NULL);
}
 
// Включение в список нового компонента
void structure_in(dyn_list &l, std::string album, std::string singer, int date, int songs)
{
    structure* c = new structure();
    
    
    c->album=album;
    c->singer = singer;
    c->date = date;
    c->songs = songs;
    c->next = NULL;
 
 
    if (chk_empty(l))
        l.head = c;
    else
        l.tail->next = c;
    l.tail = c;
}
void structure_out(std::string FileName)
{
    structure ST1;
    std::fstream file(FileName, std::ios_base::app | std::ios::binary);
    file.write((char*)&ST1, sizeof(ST1));
    file.close();
}
void CASE1(std::string FileName, dyn_list l)
{
    system("CLS");
 
    std::string album, singer;
    int date, songs;
    std::cout << "Addition new data to file" << std::endl;
 
    std::cout << "Enter name of album: ";
    std::cin >> album;
 
    std::cout << "Enter name of singer: ";
    std::cin >> singer;
 
    std::cout << "Enter release date of album: ";
    std::cin >> date;
 
    std::cout << "Enter number of songs: ";
    std::cin >> songs;
 
    structure_in(l,album,singer,date,songs);
    structure_out(FileName);
 
 
 
    system("pause");
    return;
}
void CASE2()
{
    struct dyn_list q; // Это нужно чтобы обращаться к указателям dyn_list
    struct structure *p = q.head; // присваеваем начальное значения(точнее адрес откуда и будем начинать)
    while (p != NULL)
    {
        std::cout << "Album name:" << p->album << std::endl;
        std::cout << "Singer:" << p->singer << std::endl;
        std::cout << "Release date:" << p->date << std::endl;
        std::cout << "Number of songs:" << p->songs << std::endl;
        p = p->next; // бегаем по списку пока это возможно
    }
    system("pause");
}
//void CASE3(std::string FileName) НУЖНО ПЕРЕПИСАТЬ
//{
//  system("CLS");
//  int switcher;
//  char request[30] = "", album[30], singer[30], date[30];
//
//
//  std::cout << "Press button:" << std::endl
//      << "'1' for search by Albums" << std::endl
//      << "'2' for search by Singers" << std::endl
//      << "'3' for search by Albums (structurelete coincidence)" << std::endl
//      << "'4' for search by Singers (structurelete coincidence)" << std::endl
//      << "'5' for search by Date (structurelete coincidence)" << std::endl;
//  std::cin >> switcher;
//  std::cout << "Enter your request:";
//  std::cin >> request;
//
//
//  std::ifstream file(FileName, std::ios::binary);
//  file.clear();
//  file.seekg(0);
//  while (file.read(album, 30))
//  {
//      file.read(singer, 30);
//      file.read(date, 30);
//
//
//
//      switch (switcher)
//      {
//      case 1:
//      {
//          if (strstr(album, request))
//              CoutData(album, singer, date);
//          break;
//      }
//      case 2:
//      {
//          if (strstr(singer, request))
//          {
//              CoutData(album, singer, date);
//          }
//          break;
//      }
//      case 3:
//      {
//          if (!strcmp(album, request))
//          {
//              CoutData(album, singer, date);
//          }
//          break;
//      }
//      case 4:
//      {
//          if (!strcmp(singer, request))
//          {
//              CoutData(album, singer, date);
//          }
//          break;
//      }
//      case 5:
//      {
//          if (!strcmp(date, request))
//          {
//              CoutData(album, singer, date);
//          }
//          break;
//      }
//
//      }
//
//  }
//  std::cout << std::endl << "This is all results for: '" << request << "'.";
//  system("pause");
//
//}
 
 
void Menu()
{
    system("CLS");
    std::cout //menu
        << "Press '1' to add new data" << std::endl
        << "Press '2' to show data" << std::endl
        << "Press '3' to find data" << std::endl
        << "Press '4' to exit" << std::endl;
}
 
void main()
{
    dyn_list ST1;
    constr_list(ST1);
    std::string FileName;
    std::cout << "Name of file: ";
    std::cin >> FileName;
    FileName += ".dat";
 
    size_t switcher;
    while (1)
    {
        Menu();
 
        std::cin >> switcher;
 
        switch (switcher)
        {
 
            case 1:
            {
                CASE1(FileName,ST1);
                break;
            }
            case 2:
            {
                CASE2();
                break;
            }
            /*case 3:
            {
                CASE3(FileName);
                break;
            }*/
            case 4:
            {
                return;
            }
 
 
        }
    }
 
}
0
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943
16.10.2017, 23:30
У меня не выдаёт никаких ошибок да и ошибок тут не может быть.

Не обязательно каждую строку комментировать напишите так
C++
1
2
3
4
5
6
7
/*
...
...
Ваш код
...
...
*/
Это я к 111 строке до 186 говорю

Зачем вам tail если список односвязный? Что вы собираетесь делать с ним? Вам достаточно head. На счёт функции structure_in у меня большие подозрение
0
0 / 0 / 0
Регистрация: 08.03.2017
Сообщений: 11
16.10.2017, 23:32  [ТС]
А вы какой компилятор используете?
А про комментирование строк- это так автоматически ставятся // , если в MVS нажать кнопку закомментировать.
0
0 / 0 / 0
Регистрация: 08.03.2017
Сообщений: 11
16.10.2017, 23:34  [ТС]
Я создал новый проект. Скопировал код из своего сообщения. Все равно ошибку выдает.
Миниатюры
Прочитать список структур  
0
192 / 166 / 82
Регистрация: 01.07.2016
Сообщений: 943
16.10.2017, 23:39
Подозрения исчезли. Но 56 можно написать напрямую так
C++
1
2
if(l.head == NULL)
...
Добавлено через 2 минуты
Напишите так
C++
1
2
    struct dyn_list *q; 
    struct structure *p = q -> head;
Добавлено через 43 секунды
Visual Studio сейчас под рукой нет на Code::blocks пишу
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.10.2017, 23:39
Помогаю со студенческими работами здесь

Нужно сохранить и прочитать динамический массив структур из бинарного файла
struct city{ char name_city; char metro; int year_city; int naselenie; };

Прочитать файл, заполнить контейнер структур и вывести построчно все записи, упорядоченные по возрастанию
Помогите пожалуйста, только начала работать с файлами и не понимаю даже с чего начать. Текстовый файл содержит записи вида: Фамилия Имя...

Прочитать из файла в массив структур информацию о друзьях
Подготовить текстовый файл, содержащий информацию о друзьях: фамилия и инициалы, дата рождения, знак Зодиака, номер телефона (разделителем...

Прочитать последовательность слов в список. Если количество слов четно, то тогда создать список из 2-го, 4-го и т.д. слов
Вот условие задачи(В файл занести последовательность слов. Прочитать последовательность слов в список. Если количество слов четно, то тогда...

Прочитать из файла в список
Файл cpp //--------------------------------------------------------------------------- #include &lt;vcl.h&gt; #pragma hdrstop ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru