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

Объяснить почему программа уходит в бесконечный цикл (связные списки) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вычислить сумму ряда http://www.cyberforum.ru/cpp-beginners/thread1626748.html
Дано целое число N (> 0). Вывести сумму 2 + 1/(2!) +1/(3!) + ... + 1/(N!) (выражение N! — "N факториал" обозначает произведение всех целых чисел от 1 дoN: N! = 1 * 2 * ... * N). Полученное число является приближенным значением константы е= ехр(1) (е= 2.71828183...). Пожалуйста, помогите. Заранее огромное спасибо.
C++ Реализовать структуру Student Описать структуру Student, содержащую поля: NAME - фамилия и инициалы, GROUP - номер группы, SES - успеваемость (массив из 5 элементов). Написать программу выполняющую следующие действия: ввод с клавиатуры данных в массив STUD1 (состоит из 10 структур Student); сортировку записей по алфавиту; вывод на дисплей фамилий и групп студентов, имеющих хотя бы одну двойку, а если таких нет,... http://www.cyberforum.ru/cpp-beginners/thread1626741.html
C++ В заданных массивах найти количество элементов равных нулю и заменить их на -100 в случае выполнения условия
Помогите пожалуйста. В массивах Х1..Х5, Y1..Y7, Z1..Z14 определить количество равных нулю элементов. Если их больше половины, то первый и последний элементы заменить на -100 (минус сто). Заранее огромное спасибо.
Создать программу-счётчик слов (помогите доработать код) C++
Эта программа видит на входе "Ма-ма -мыла раму. Рама-, мыла маму. Мама была рамой. А у Саши 0 - шуры муры. А у Шуры нет" а на выходе должно выводится вот это по частоте а 2 была 1 мама 2 маму 1 муры 1 мыла 2 нет 1 рама 1 рамой 1
C++ Объяснить почему не работает заполнение массива http://www.cyberforum.ru/cpp-beginners/thread1626692.html
#include <iostream> #include <cstdio> #include <fstream> #include <string> #include <stdlib.h> using namespace std; int counting(){ setlocale(LC_ALL,".1251");
C++ Объяснить назначение ключевого слова static Здравствуйте! Я пытаюсь разобраться с использованием static`a и у меня такой вопрос: будет ли корректно работать программа конвертирования числа в строку , если объявить массив char как static ? char * itoa(int x) { static char buffer; /*.....*/ } подробнее

Показать сообщение отдельно
mercurygermes
1 / 1 / 0
Регистрация: 26.09.2015
Сообщений: 179
27.12.2015, 16:19     Объяснить почему программа уходит в бесконечный цикл (связные списки)
Всем привет.
Собрал связанный список, он работает, но при вводе типа char, программа уходит в бесконечный цикл.
Без данного типа данных, функционирует нормально.

Вот основной код:

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
#include <iostream>
#include <random>
#include <time.h>
#include <string.h>
#include "связанный список.h"
using namespace std;
typedef unsigned short USHORT;
int main()
{
    setlocale (LC_ALL, "rus");
    //srand (time(NULL));
    USHORT weght, price;
    char name [40];
    LinkedList List;
    Cargo * pCargo;
    for ( ; ; ){
        cout << " Если Вес равен нулю, Вод прекратиться!Введите вес. : ";
        cin >> weght;
        cout << endl;
        if (!weght)
            break;
        cout << "Введите цену: ";
        cin >> price;
        cout << endl;
        cout << "Введите название продукта: ";
        pCargo = new Cargo(weght, price);
        cin.get(name, 39);
        pCargo->SetName(name);
 
        List.Insert(pCargo);
 
    }
    system("cls");
    List.ShowAll();
 
    system("pause");
    return 0;
}
 
 
вод заголовочный файл:
using namespace std;
typedef unsigned short USHORT;
enum {SMALLER, LARGER, SAME};
 
class Cargo
{
public:
    Cargo(USHORT weight, USHORT price);
    ~Cargo(){}
    USHORT Compare(const Cargo & lTheCargo);
    void SetName(char n[40]){ strcpy(name,n); }
    
    void Show()
    {    
        cout << "название продукта: " << name;
        cout << "\tВес груза: \t" << Weight << "   "; 
        cout << "\tЦена груза: \t" << Price << endl;
        
    }
private:
    USHORT Weight;
    USHORT Price;
    char name[40];
};
Cargo::Cargo (USHORT weight, USHORT price) : Weight(weight) , Price (price)
{
 
}
USHORT Cargo::Compare (const Cargo & lTheCargo)
{
    if (Weight < lTheCargo.Weight)
        return SMALLER;
 
    else if (Weight > lTheCargo.Weight)
        return LARGER;
 
    else
        return SAME;
}
 
class Node;
class HeadNode;
class InternalNode;
class TailNode;
 
class Node
 {
public :
    Node ( ) { }
    virtual ~Node() { }
    virtual Node * pInsert(Cargo * pTheCargo) = 0;
    virtual void Show() = 0;
private:
};
 
class InternalNode  :  public Node
 {
public :
    InternalNode(Cargo * pTheCargo, Node * pnext ) ;
    ~InternalNode(){ delete pMyNext; pMyCargo; }
    virtual Node * pInsert(Cargo * pTheCargo) ;
    virtual void Show(){ pMyCargo->Show( ) ; pMyNext->Show () ; }
 
private:
    Cargo * pMyCargo;
    Node * pMyNext;
};
InternalNode::InternalNode(Cargo * pTheCargo, Node * pnext) : pMyCargo(pTheCargo) , pMyNext(pnext)
{
 
}
Node * InternalNode::pInsert(Cargo * pTheCargo)
{
    USHORT result = pMyCargo->Compare(*pTheCargo ) ;
    switch (result)
    {
    case SAME:
    case SMALLER:
    {
                   InternalNode * CargoNode = new InternalNode(pTheCargo, this ) ;
                   return CargoNode;
    }
    case LARGER:
        pMyNext = pMyNext->pInsert(pTheCargo ) ;
        return this;
    }
    return this;
}
 
class TailNode : public Node
{
public:
    TailNode(){}
    ~TailNode(){}
    virtual Node * pInsert(Cargo * pTheCargo) ;
    void Show(){}
private:
};
 
Node * TailNode::pInsert(Cargo * pTheCargo)
{
    InternalNode * CargoNode = new InternalNode(pTheCargo, this ) ;
    return CargoNode;
}
 
class HeadNode : public Node
{
public:
    HeadNode();
    ~HeadNode(){ delete pMyNext; }
    Node * pInsert(Cargo * pTheCargo ) ;
    void Show(){ pMyNext->Show( ) ; }
private:
    Node * pMyNext;
};
 
 HeadNode::HeadNode()
{
    pMyNext = new TailNode;
}
 Node * HeadNode::pInsert(Cargo * pTheCargo)
 {
     pMyNext = pMyNext->pInsert(pTheCargo ) ;
     return this;
 }
 
 class LinkedList
 {
 public:
     LinkedList();
     ~LinkedList(){ delete pMyHead; }
     void Insert(Cargo * pCargo);
     void ShowAll(){ pMyHead->Show( ) ; }
 private:
     HeadNode * pMyHead;
 };
 LinkedList::LinkedList()
 {
     pMyHead = new HeadNode;
 }
 
 void LinkedList::Insert(Cargo * pCargo)
 {
     pMyHead->pInsert(pCargo) ;
 }
Также буду очень рад, если вы оцените мой уровень по коду и скажите, соответствует ли мои знания уровню junior.
Код взят с книги Джесс Либерти, но я его немого изменил и подстроил под себя. Весь синтаксис данного кода понимаю на уровне книги.
Заранее большое спасибо за понимание и помощь.

 Комментарий модератора 

mercurygermes, , пожалуйста, прочитайте правила форума и постарайтесь впредь их соблюдать:
П. 4.3. Создавайте темы с осмысленными и понятными названиями - это серьезно повышает шансы, что на Ваш вопрос ответят.
П. 4.9. Используйте тэги форматирования текста для удобства восприятия ваших сообщений другими пользователями.


Добавлено через 1 час 30 минут
краткое описание данного кода.
код должен принимать данные о весе и цене продукта, а также название продукта.
после завершения вписывание названий и характеристик продукта, программа должна вывести на экран
список продукта по убыванию.
пример.
мясо
вес 30
цена 400.

проблемма именно с водом имени. когда я в данные вожу тип переменной char, то программа начинает глючить.
после вода веса и цены, программа отображает бесконечное количество раз, прозбу вода веса
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 20:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru