0 / 0 / 0
Регистрация: 24.12.2014
Сообщений: 1

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

24.12.2014, 02:58. Показов 768. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
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 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru