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

Вывод списка - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
//Александр
 Аватар для //Александр
6 / 6 / 0
Регистрация: 15.04.2010
Сообщений: 151
03.11.2010, 20:13     Вывод списка #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
if(key=='3')
 {p=head;
      while(p->next != NULL)
        {
             cout << p->number_UDK << endl;
             cout << p->famil_avtora <<' ';
                    cout << p->inicalu << endl;
             cout << p->name << endl;
             cout << p->god_izdan << endl;
             cout << p->kol_vo_ekzempl << endl;
        p->next;
       } 
 }
мне нужно при нажатии тройки вывести весь список, но я что то не нак написал и выводится у меня только последний элемент списка и программа зацикливается.
вот сама структура
C++
1
2
3
4
5
6
7
8
9
struct LIST {
int number_UDK;
char famil_avtora[20];
char inicalu[5];
char name[30];
int god_izdan;
int kol_vo_ekzempl;
LIST *next;
};
если нужно скину весь код
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2010, 20:13     Вывод списка
Посмотрите здесь:

Ввод и вывод односвязного списка C++
Кроссплатформенный вывод списка файлов C++
Вывод списка студентов C++
Вывод на экран списка C++
Вывод списка в файл C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
03.11.2010, 20:54     Вывод списка #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
if(key=='3')
 {p=head;
          while(p->next != NULL)
            {
                 cout << p->number_UDK << endl;
                 cout << p->famil_avtora <<' ';
                    cout << p->inicalu << endl;
                 cout << p->name << endl;
                 cout << p->god_izdan << endl;
                 cout << p->kol_vo_ekzempl << endl;
                p=p->next;
           } 
 }
Ага?
//Александр
 Аватар для //Александр
6 / 6 / 0
Регистрация: 15.04.2010
Сообщений: 151
03.11.2010, 20:59  [ТС]     Вывод списка #3
изменил но выводит только последний элемент списка и завершает работу .
вот весь код может так проще будет найти ошибку
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
#include <iostream>
#include <cstdlib>
#include<clocale>
#include <fstream>
#include <conio.h>
using namespace std;
 
struct LIST {
int number_UDK;
char famil_avtora[20];
char inicalu[5];
char name[30];
int god_izdan;
int kol_vo_ekzempl;
LIST *next;
};
 
void add(fstream &fin,LIST *head)
{LIST* p = head; 
 
    while( !fin.eof() )
{
    
    fin >> p->number_UDK;
    fin >> p->famil_avtora;
    fin >> p->inicalu;
    fin >> p->name;
    fin >> p->god_izdan;
    fin >> p->kol_vo_ekzempl;
    p->next;
    
}
}
 
 
int main()
{ setlocale(LC_ALL, "rus");
 fstream fin;
 char key='0';
 int udk;
  fin.open("fin.txt",ios_base::in);
    if(fin.is_open()==false)
        cout << "ошибка открытия fin.txt!!!";
   
LIST *head;         
head = new LIST;
 
add(fin,head);
while (key !='\0')
    while(!kbhit() && key!='\0')
     {cout << "1-Взять книгу" << endl;
      cout << "2-Вернуть книгу" << endl;
      cout << "3-Наличие книг в библиотеке" << endl;
         key = getch();
          if(key=='1')
            {  cin >> udk;
             // berem(udk);
            }
          if(key=='2')
          {cin >> udk;
            //  vozvrat(udk);
          }
          if(key=='3')
          {LIST *p=head;
              while(p->next != NULL)
              {
                  cout << p->number_UDK << endl;
                  cout << p->famil_avtora <<' ';
                  cout << p->inicalu << endl;
                  cout << p->name << endl;
                  cout << p->god_izdan << endl;
                  cout << p->kol_vo_ekzempl << endl;
                    p=p->next;
              } 
          }
          system("cls");
     }
return 0;
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
03.11.2010, 21:12     Вывод списка #4
//Александр, В добавлении так же поправь. И потом посмотри заполнился ли файл.
Хм. Сейчас. Секунду

Добавлено через 6 минут
Неправильное построение структуры списка самого по себе... Надо подумать.
//Александр
 Аватар для //Александр
6 / 6 / 0
Регистрация: 15.04.2010
Сообщений: 151
03.11.2010, 21:30  [ТС]     Вывод списка #5
я не пойму почему но после выполнения add ,head становится на последний элемент списка(я его вроде не изменяю)

Добавлено через 12 минут
Почему в функции add, head и p изменяются одновременно?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
03.11.2010, 21:31     Вывод списка #6
//Александр, head на первом. Дело не в том. Дело в том, что функция add не выполняется корректно при вашем коде.
//Александр
 Аватар для //Александр
6 / 6 / 0
Регистрация: 15.04.2010
Сообщений: 151
03.11.2010, 21:35  [ТС]     Вывод списка #7
я пошагово проверял получается одновременно меняются(( подскажите как правельно изменить ??))
//Александр
 Аватар для //Александр
6 / 6 / 0
Регистрация: 15.04.2010
Сообщений: 151
03.11.2010, 21:37  [ТС]     Вывод списка #8
Вот пошаговую проверку сделал
Миниатюры
Вывод списка  
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
03.11.2010, 22:05     Вывод списка #9
//Александр, Конечно head Будет меняться. Ведь у него и у p получается один адрес в памяти.

Добавлено через 6 минут
Так работает. Но попрождает утечки памяти.

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
#include <iostream>
#include <cstdlib>
#include<clocale>
#include <fstream>
#include <conio.h>
using namespace std;
 
struct LIST {
    int number_UDK;
    char famil_avtora[20];
    char inicalu[5];
    char name[30];
    int god_izdan;
    int kol_vo_ekzempl;
    LIST *next;
};
 
void add(fstream &fin,LIST *head)
{
        LIST* p = head;
        while( !fin.eof() )
{
        fin >> p->number_UDK;
        fin >> p->famil_avtora;
        fin >> p->inicalu;
        fin >> p->name;
        fin >> p->god_izdan;
        fin >> p->kol_vo_ekzempl;
        p->next=new LIST;
        if(!fin.eof())
            p=p->next;
}
        p->next=0;
}
 
 
int main()
{ setlocale(LC_ALL, "rus");
 fstream fin;
 char key='\0';
 int udk;
  fin.open("fin.txt",ios_base::in);
    if(fin.is_open()==false)
        cout << "ошибка открытия fin.txt!!!";
   
LIST *head;                     
head = new LIST;
 
add(fin,head);
while (key !='0')
    while(!kbhit() && key!='0')
     {cout << "1-Взять книгу" << endl;
      cout << "2-Вернуть книгу" << endl;
      cout << "3-Наличие книг в библиотеке" << endl;
                 key = getch();
          if(key=='1')
                    {  cin >> udk;
                     // berem(udk);
                    }
                  if(key=='2')
                  {cin >> udk;
                        //  vozvrat(udk);
                  }
                  if(key=='3')
                  {LIST *p=head;
                          while(p != 0)
                          {
                                  cout << p->number_UDK << endl;
                                  cout << p->famil_avtora <<' ';
                                  cout << p->inicalu << endl;
                                  cout << p->name << endl;
                                  cout << p->god_izdan << endl;
                                  cout << p->kol_vo_ekzempl << endl;
                                  p=p->next;
                                  system("pause");
                          } 
                  }
                  system("cls");
     }
return 0;
}
//Александр
 Аватар для //Александр
6 / 6 / 0
Регистрация: 15.04.2010
Сообщений: 151
03.11.2010, 22:08  [ТС]     Вывод списка #10
а как изменить что бы head не менялось??

Добавлено через 1 минуту
спасибо!!!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2010, 22:08     Вывод списка
Еще ссылки по теме:

Вывод списка на экран C++
C++ Вывод односвязного списка на C
Вывод списка C++

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
03.11.2010, 22:08     Вывод списка #11
//Александр, никак. зачем иначе заполнение? вы же в ффункцию head посылаете
Yandex
Объявления
03.11.2010, 22:08     Вывод списка
Ответ Создать тему
Опции темы

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