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

Связанный список, найти ошибку - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Два раза http://www.cyberforum.ru/cpp-beginners/thread941861.html
Почему в 204-ой и 207-ой строках, для того, чтобы достать имя, используется такой подход? : sparky.GetName().GetString() GetName() уже содержит имя. Для чего вызывать GetString()? #include "stdafx.h" #define DEBUG #define SHOW_INVARIANTS #include <iostream> #include <string.h> using namespace std;
C++ ООП часть программы Доброго времени суток. Может кто поможет разобраться с частью программы? void Input() // ввод { double Ch; // значение Ch с плавающей точкой int T1, T2; // целочисленные значения T1, T2 cin>>Ch; // ввод значения Ch div_t T; // div_t являются возвращаемым типом функции div, div - деление двух... http://www.cyberforum.ru/cpp-beginners/thread941846.html
C++ Путаница в операторах
Что же возвращает 6-ая строка? BOOL String::Invariants() const { #ifdef SHOW_INVARIANTS cout << "Invariants Tested" << endl; #endif return ( (itsLen && itsString) || (!itsLen && !itsString) ); }
Компилятор С++ под windows rt C++
собственно есть ли он вообще?? или подскажите компилятор под другой язык, заранее спасибо!!
C++ Считывание текста из файла http://www.cyberforum.ru/cpp-beginners/thread941807.html
Собственно, задача такая: есть файл info.txt в ней строки такого формата $параметр_1$параметр_2$параметр_3$...$параметр_n есть объект класса, который имеет эти свойства. Необходимо считывая строки, создавать объекты и присваивать свойствам объекта вот эти параметры. $ - сам придумал для разделения, может не очень хорошо.
C++ Не проще просто int? Не проще было бы использовать в 41 строке тип int, вместо определенного в 23-ей BOOL? #include "stdafx.h" #define DEBUG #define SHOW_INVARIANTS #include <iostream> #include <string.h> using namespace std; #ifndef DEBUG #define ASSERT(x) подробнее

Показать сообщение отдельно
VLK
 Аватар для VLK
192 / 161 / 12
Регистрация: 05.05.2013
Сообщений: 1,221
22.08.2013, 16:26     Связанный список, найти ошибку
http://iguania.ru/stati-po-programmi...iy-spisok.html

Вот статья про связанный список, все доступно и понятно написано, я взял из нее первый список, который добавляет узлы в конец списка, переписал, вроде как все строчка в строчку, кроме конечно некоторых названий переменных, классов, все работает, но мне не выводит последний узел тот, у которого указатель next = NULL, при это все тоже самое из статьи работает, помогите найти ошибку, вот код:

Кликните здесь для просмотра всего текста
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
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
 
class MyNote
{
public:
int var; /* содержит значение */
MyNote *next; /* содержит адрес на следующий узел (объект класса MyNote) */
 
};
 
class MyList
{
private:
MyNote *head; /* начало связанного списка (первый объект класса MyNote) */
 
public:
MyList() { head = NULL; }
 
void add_MyNote(int rhs)
/* функция-элемент добавляющая новый узел (объект класса MyNote) в список */
{ 
MyNote *tempOne = new MyNote; /* динамически создаем новый узел (объект класса MyNote) */
tempOne->var = rhs; /* присваиваем var из класса MyNote значение */
tempOne->next = NULL; 
/* присваиваем указателю на следующий узел значение NULL т.е. 0,
мы только добавляем узел, он будет в списке последний, за ним ни чего нет, 
т.е. указывать не на что, по этому указываем на NULL, что будет означает 
что это последний узел списке */
 
/* теперь проверяем, является ли данный узел (объект класса MyNote) первым в программе */
if (head == NULL)
{ head = tempOne; }
 
/* если создаваемый  узел (объект класса MyNote) не является первым узлом в программе */
else
{ 
MyNote *tempTwo = head;
/* создаем вспомогательный объект и присваиваем ей указатель на начало списка */
 
/* ищем при помощи цикла (от начала списка), предпоследний узел (объект класса MyNote)
он должен содержать указатель next равный NULL, т.к. он до этого был последний узлом
для того, что бы найти созданный в предыдущий раз узел (объект класса MyNote) 
и присвоить его указателю next за место NULL, адрес на новый созданный узел (объект класса MyNote) */
while (tempTwo->next != NULL)
{
tempTwo = tempTwo->next;
/* переход к следующему узлу (объект класса MyNote),
для поиска next равного NULL */
}
/* после того как мы нашли предпоследний узел (объект класса MyNote), 
меняем его указатель next на последний узел (объект класса MyNote) */
tempTwo->next = tempOne;
}
}
 
 
void print_MyList() const 
/* функция-элемент выводящая на экран связанный список */
{ 
MyNote *temp = head;
 
/* выводим все значения хранящиеся в списке, пока не дойдем до узла 
с указателем на NULL, при этом сам узел с NULL (последний в списке) выведен не будет! */
while (temp->next != NULL)
{
cout << temp->var << endl;
temp = temp->next;
}
}
};
 
 
int main()
{
setlocale(LC_ALL,"");
 
MyList test;
 
test.add_MyNote(7); 
test.add_MyNote(4); 
test.add_MyNote(5); 
test.add_MyNote(12); 
test.add_MyNote(3); 
 
test.print_MyList();
 
system("pause");
return 0;
}


как я подозреваю проблема в функции print_MyList() и его цикле в строчках 67-71, но в статье точно такой же цикл и все нормально работает.


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