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

Исправление ошибки в реализации очереди

29.10.2019, 20:04. Показов 1211. Ответов 1
Метки нет (Все метки)

Добрый день. В лабораторной работе поставили задачу создать очередь, которая должна представляться в виде таблицы. При запуске пользователь вводит строки этой таблицы; каждая строка разбивается на отдельные поля структуры, с помощью которой создана очередь. Чтобы прекратить ввод строк, пользователь вводит "***", после этого на экран выводится результат. Максимальное количество элементов в очереди равно десяти.
После ввода второй строки среда выдает ошибку и выделяет 55 строчку кода. Ошибка в логе такая:
Кликните здесь для просмотра всего текста
First chance exception at $004016C7. Exception class $C0000005 with message 'access violation at 0x004016c7: write of address 0x00000014'. Process Project1.exe (17876)

Что делать, подскажите, пожалуйста.
Кликните здесь для просмотра всего текста

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
#include <iostream.h>
#include <windows.h>       // подключение необходимых заголовных файлов
#include <iomanip.h>
 
struct Component {        // описание очереди "Компонент"
        char name [10];   // поле структуры, которое будет хранить имя компонента
        char type[2];     // поле структуры, которое будет хранить тип компонента
        float price;      // поле структуры, которое будет хранить цену компонента
        int amount;       // поле структуры, которое будет хранить количество компонентов
        Component *next;  // указатель на следующий элемент очереди
    };
Component *first = NULL, *last = NULL; //объявление указателей на начало и конец очереди и их начальное обнуление
 
void add (char string[50]);  // объявление функции для добавления элемента в очередь
 
void print();                // объявление функции для вывода очереди на экран
 
 int main()
{
    SetConsoleOutputCP(1251);
    char string[100]; 
    cout << "Введите название, тип, номинал и количество составляющих через пробел. Для окончания введите \"***\" \n";
    for (int i = 0; i < 10; i++) {
        cin.getline(string, 50);
        if (string[0] == '*' && string[1] == '*' && string[2] == '*') {
            break;
        }
        add(string);
    }
    cout << "-----------------------------------------------\n";
    cout << "|Ведомость составляющих-----------------------|\n";
    cout << "|---------------------------------------------|\n";
    cout << "| Название   | Тип | Цена    | Количество     |\n";
    cout << "|------------|-----|---------|----------------|\n";
    print();
    cout << "|---------------------------------------------|\n";
    cout << "|                                             |\n";
    cout << "|                                             |\n";
    cout << "-----------------------------------------------\n";
    system("pause");
 
    return 0;
}
 
void add (char string[50]){                          //определение функции для добавления элемента в очередь
    Component *component = new Component;            // выделение памяти под новый элемент
    strcpy(component -> name, strtok(string, " "));  //вырезаем кусок строки до первого пробела и помещаем этот кусок в поле "Название"
    strcpy(component -> type, strtok(NULL, " "));
    component -> price = atof(strtok(NULL, " "));
    component -> amount = atoi(strtok(NULL, " "));
    if (first == NULL) {                            // если очередь не создана, то новый элемент становится первым
        first = component;
    }
    else {                                          
        last -> next = component;                   //иначе элемент присоединяется к последнему 
        last = component;                           // записуя в last адрес нового элемента
    }
}
 
void print(){
    Component *component = first;
    while(component != 0){
        cout << "|" << setw(12) <<component -> name << "|" << setw(5) << component -> type << "|" << setw(9)<< component -> price << "|" << setw(16)<< component -> amount << "|\n";
        component = component -> next;              //переход к следующему элементу очереди
    }
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.10.2019, 20:04
Ответы с готовыми решениями:

Ошибки реализации очереди
Программу демонстрации работы очереди(FIFO) Функции: Push – добавить элемент в очередь; Pop() –...

Код реализации очереди на базе массива
:cry:

Очереди: особенности реализации на базе списков
Пом-гите решить, заранее благодарен.)) Билет 7 1 Очереди: особенности реализации на базе...

Исправление ошибки
Не пойму что не так. Появляется ошибка &quot;Method or data member not found (Error 461)&quot; при...

1
Модератор
Эксперт CЭксперт С++
5104 / 4533 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
29.10.2019, 20:10 2
Лучший ответ Сообщение было отмечено gr_yarik как решение

Решение

gr_yarik, чему у Вас равно last? NULL! И никак не меняется!
Естественно, когда при вводе второй строки программа пытается адресовать этим указателем, что будет? exception!
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.10.2019, 20:10
Помогаю со студенческими работами здесь

Исправление ошибки
Здравствуйте, помогите пожалуйста, хотел задать функцию вывода статей с миниатюрами на главной,...

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

Исправление ошибки
С точки зрения &quot;эффективного программирования&quot; в процедуре Poisk присутствует ошибка, связанная с...

Исправление ошибки!
Привет) Ребята, вот такую ерунду пишет Делфи при запуске одной формы An error occurred while...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru