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

Ошибка при работе со списками при динамическом выдилении памяти

24.12.2014, 02:58. Показов 784. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно организовать последовательность структур в односвязный список, при єтом организовать добавление елемента в готовый список и изять данние о книгах, стоимость которых менше чем в библиотеке

Вот код, не пойму что не так, ниже есть текстовый документ с которого я считываю данние.

#include <iostream>
#include <fstream>
#include <string.h>
#include <stdlib.h>
#define N 20
using namespace std;
struct book
{
char name[64], author[64];
int page, year;
double price;
book* next;
};
void sort(book *start)
{
book *elem, *tmp;
bool token = 0;
while (!token)
{
token = 1;
elem = start;
while (elem->next->next)
{
if (strncmp(elem->next->author, elem->next->next->author, 1) > 0)
{
token = 0;
tmp = elem->next;
elem->next = elem->next->next;
tmp->next = elem->next->next;
elem->next->next = tmp;
}
elem = elem->next;
}
}
}
int main()
{
setlocale(LC_ALL, "Ukrainian");
book *p;
book *start = new book;
start->next = NULL;
char str[256];
ifstream enter("C:\\books.txt");
int i = 0;
while (i< N)
{
book *pp = new book;
if(i)
p->next = pp;
p = pp;
p->next = NULL;
enter.getline(str, sizeof(str));
char *pw;
pw = strtok (str, "\t");
strcpy(p->name, pw);
pw = strtok (NULL, "\t");
strcpy(p->author, pw);
pw = strtok (NULL, "\t");
p->year = atoi(pw);
pw = strtok (NULL, "\t");
p->page = atoi(pw);
pw = strtok (NULL, "\t");
p->price = atof(pw);
if(start->next == NULL)
{ start = p; }
i++;
}
double aver = 0;
book *pt = start;
while(pt != NULL)
{
aver += pt->price;
pt = pt->next;
}
aver /= N;
cout << "Середня ціна: " << aver << endl;
cout << "_______________________________________ _______________________" << endl;
pt = start;
book *pp;
while(1)
{ pp = pt;
pt = pt->next;
if(!pt) break;
if(pt->price < aver)
{ if(!pt)
{
pp->next=NULL;
break;
}
pp->next = pt->next;
pt = pp;
}
}
pt = start;
if(pt->price <aver)
{
if(pt)
start = pt -> next;
else start = NULL;
}
pt = start;
sort(start);
while(pt)
{
cout << pt->name << "\t" << pt->author << "\t" << pt->page
<< "\t" << pt->year << "\t" << pt->price << endl;
pt = pt->next;
}
char n[64], a[64];
int pa, y;
double pr;
p = start;
while(p->next)
{
p = p->next; }

while(1)
{
book *pp = new book;
p->next = pp;
p = pp;
p->next = NULL;
cout << "_______________________________________ _______________________" << endl;
cout << "Введiть назву книги для вставлення у список (end для виходу): " << endl;
cin >> n;
if(!strcmp(n, "end"))
break;
cout << "Введiть iм'я автора : " << endl;
cin >> a;
cout << "Введiть рiк написання, кiлькicть сторiнок i цiну: " << endl;
cin >> pa >> y >> pr;
strcpy(p->name, n);
strcpy(p->author, a);
p->page = pa;
p->year = y;
p->price = pr;
}

pt = start;
p = start;
while(p->next)
{
cout << p->name << "\t" << p->author << "\t" << p->year
<< "\t" << p->page << "\t" << p->price << endl;
p = p->next;
}
return 0;
}






Володар перснiв Дж.Толкiн 1968 342 100
Гордiсть i упередження Дж.Остен 1856 230 47
Темнi початки Ф.Пуллман 1980 248 30
Автостопом Галактикою Д.Aдамс 1978 145 73.5
Гаррi Поттер (серiя) Дж.Роулiнг 1856 346 55.49
Убити пересмiшника Х.Лi 1890 310 64.99
Вiннi Пух i всi всi всi А.Мiлн 1910 201 23.49
1984(колекцiя) Д.Оруелл 1987 232 114.49
Хронiки Нарнiї Кл.Льюiс 1987 260 89.9
Джейн Ейр Ш.Бронте 1965 420 44.99
Виверт-22 Дж.Хеллер 1970 240 22
Грозовий перевал Е.Бронте 1864 168 15
Спiв птахiв С.Фолкс 1914 250 29.99
Ребекка Д.Морье 1749 360 67.99
Над прiрвою в житi Дж.Селлiнджер 1856 286 34.5
Вiтер у вербах К.Грем 1876 320 60.3
Великi надiї Ч.Дiккенс 1983 256 56.7
Маленькi жiнки Л.Елкотт 1977 180 35.90
Мандолiна капiтана К.Берньер 1948 230 45
Вiйна i мир Л.Толстой 1968 460 79.89

даные построины так: Книга, Автор, год создания, количество страниц, цена книги.
Заранее извиняюсь за орфогрфические ошыбки.
C++
1
[CPP]
[/CPP]
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.12.2014, 02:58
Ответы с готовыми решениями:

Ошибка при динамическом выделении памяти
Здравствуйте! В программе возникает ошибка при выполнении: отлаживаю:после 9 строчки переходит сразу на 18. Размер файла определяется...

Ошибка при динамическом выделении памяти
Я не понимаю почему, но почему-то пример по динамическому выделению памяти, взятый с этой веб-страницы: http://cppstudio.com/post/9555/...

Ошибка при динамическом выделении памяти
почему у меня возникет ошибка вот тут struct TOVAR *New = new struct TOVAR; пишит недопустимый неполный тип на struct подчеркивает...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.12.2014, 02:58
Помогаю со студенческими работами здесь

Ошибка при очистке памяти в динамическом массиве
вот имеется такой код. программа, которая вставляет массив в массив. всё работает правильно, но в конце выскакивает ошибка. при этом если...

Ошибка доступа к памяти при работе с потоками
проблема в следующем в оконном приложении( среда разработки C++ Builder XE3) создаю при нажатии кнопки &quot;Run&quot; поток HANDLE...

Ошибка доступа к памяти при работе со структурами
Задача состоит следующая создать динамический массив. Т.е кол-во элементов в строках может быть разной. Я решил немного по...

Ошибка обращения к памяти при работе цикла (access violation)
Есть нехитрая процедура, которая рассчитываем коэффициенты. procedure TForm1.N6Click(Sender: TObject); var m1, m2, f, f1, f2: array...

3 коротких. Возникла ошибка при работе первых 64 Кб основной памяти. что делать ?7
комп умер что делать включается и через 15 сек вырубается???


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru