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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
mishe4ka
0 / 0 / 0
Регистрация: 21.09.2011
Сообщений: 21
#1

Запись, чтение объектов в файл через указатели. - C++

21.09.2011, 15:02. Просмотров 1255. Ответов 6
Метки нет (Все метки)

не могу прочитать объекты из файла. Сломал голову. Все перепробовал.
Препод отправил гуглить))).
Писать что то вроде пишет? Но что?
А читать при перезапуске программы отказывается. Говорит что в файле (0) объектов.
И ошибка сегментирования (как правило выход за пределы цикла)???

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
#include<iostream>
#include<cstdlib>
#include<fstream>
using namespace std;
////////////////////////////////////////////
class person
{
  char name[80];
  int age;
  static person* pers[];
  static int n;
 
 
 public:
   void getData()
   {
     cout<<"\n Введите имя: "; cin>>name;
     cout<<" Введите возраст:"; cin>>age;
   }
//////////////////////////
  void showData()
   {
    cout<<"\n Имя:"<<name;
    cout<<"\n Возраст:"<<age;
   }
 
 static void add();
 static void display();
 static void write();
 static void read();
  
};
/////////////////////////
  void person:: display()
   {
    for(int j=0;j<n;j++)
      {
        cout<<"Person #"<<(j+1);
        pers[j]->showData();
        cout<<endl;
      }
  }
 
/////////////////////
  void person:: write()
  { 
    int j;
    cout<<"Идет запись..."<<n<<" человек\n";
    ofstream ouf;
    ouf.open("PERS.DAT",ios::app|ios::binary);
   
 
    for( j=0;j<n;j++)
     {
      ouf.write(reinterpret_cast<char*>(pers[j]),sizeof(person));
     }
   cout<<"Записано"<<j<<"человек"<<endl;
 }
//////////////////
 void person:: read()
 {
  ifstream inf;
  inf.open("PERS.DAT",ios::binary);
  inf.seekg(0);
  cout<<"количество человек "<<n<<endl;
  cout<<"чтение из файла "<<endl;
  int j;
 
  inf.read(reinterpret_cast<char*>(pers[j]),sizeof(person));
 
  while(!inf.eof())
   {
    cout<<"Начало цикла "<<endl;    
    pers[j]=new person;
    inf.read(reinterpret_cast<char*>(pers[j]),sizeof(person));
    cout<<"адрес человека "<<pers[j]<<endl;
    j++;
   }
  cout<<"Идет чтение "<<j<<"человек \n"<<endl;
  
 }    
///////////////////////////
 void person:: add()
 {
  char ch;
   cout<<"Добавить человека(y/n)?";
   cin>>ch;
   while(ch=='y')
     {
      pers[n]=new person;
      pers[n]->getData();
      n++;
      cout<<"сохранить еще человека(y/n)?";
      cin>>ch;
     }
 }
 
 
///////////////////////////////////////////////////////
int person::n;
person* person::pers[100];
 
///////////////////////////////////////////////////////
int main()
{
 char ch;
 while(true)
   {
    cout<<"'a'-добавить человека"
        "\n'd'-вывести сведения"
        "\n'w'-записать все данные в файл"
        "\n'r'-прочитать все данные из файла"
        "\n'x'-выход"
        "\nВаш выбор: ";
     cin>>ch;
   
    switch(ch)
     {
       case'a': person::add(); break;
       case'd':person::display(); break;
       case'w':person::write();   break;
       case'r':person::read();    break;
 
       case'x':exit(0);
       default:cout<<"Неизвестная команда";
     }
   }
  
   return 0;
 }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2011, 15:02     Запись, чтение объектов в файл через указатели.
Посмотрите здесь:

запись и чтение динамических объектов в файл C++
Запись объектов в файл и чтение C++
C++ Вывод в файл и последующее чтение из файла объектов класса
C++ Бинарные чтение/запись объектов
Запись и чтение объектов разных классов в один файл C++
Запись данных в динамический массив через указатели C++
C++ Сортировка объектов через указатели, основанная на алфавитном порядке имен
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6549 / 3969 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.09.2011, 15:22     Запись, чтение объектов в файл через указатели. #2
Бинарные файлы
mishe4ka
0 / 0 / 0
Регистрация: 21.09.2011
Сообщений: 21
21.09.2011, 15:45  [ТС]     Запись, чтение объектов в файл через указатели. #3
Спасибо. Проще некуда. Надо именно через указатели.
NaV'i4ok
3 / 3 / 0
Регистрация: 18.03.2011
Сообщений: 85
21.09.2011, 20:29     Запись, чтение объектов в файл через указатели. #4
Исправлена Ваша read():

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
//////////////////
 void person:: read()
 {
  ifstream inf;
  inf.open("PERS.DAT",ios::binary);
  inf.seekg(0);
  cout<<"количество человек "<<n<<endl;
  cout<<"чтение из файла "<<endl;
  n=0;      //В памяти человек нет
  cout<<"Начало цикла "<<endl;
  while(true)
   {
       pers[n]=new person;
       inf.read(reinterpret_cast<char*>(pers[n]),sizeof(person));
       if(inf.eof())//выход из цикла по EOF
            break;
        
        
        cout<<"адрес человека "<<pers[n]<<endl;
        n++;
   }
  cout<<"Идет чтение "<<n<<"человек \n"<<endl;
  
 }    
///////////////////////////
mishe4ka
0 / 0 / 0
Регистрация: 21.09.2011
Сообщений: 21
21.09.2011, 22:23  [ТС]     Запись, чтение объектов в файл через указатели. #5
Все работает. Тема закрыта.Огромное спасибо.
NaV'i4ok
3 / 3 / 0
Регистрация: 18.03.2011
Сообщений: 85
21.09.2011, 22:43     Запись, чтение объектов в файл через указатели. #6
Вот очень хорошая книга,которая мне очень помогает(может пригодиться)

Лафоре Р. Объектно-ориентированное программирование в С++. Классика Computer Science. 4-е изд.-СПб.: Питер, 2007. – 928 с.: ил.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.09.2011, 22:47     Запись, чтение объектов в файл через указатели.
Еще ссылки по теме:

C++ Сериализация объектов с полями std::string + запись/чтение в файл
Запись файла через одно приложение, а чтение через другое C++
C++ Запись и чтение объектов класса в файл С ++
Добавить вывод в файл и чтение из файла объектов класса C++
Создание/открытие файлов, чтение из файла и запись в файл через наследование C++

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

Или воспользуйтесь поиском по форуму:
mishe4ka
0 / 0 / 0
Регистрация: 21.09.2011
Сообщений: 21
21.09.2011, 22:47  [ТС]     Запись, чтение объектов в файл через указатели. #7
Да я тоже по ней работаю. Только вот с while загнался. reinterpret_cast я писал до этого. просто опечатался. Сижу допиливаю.С флагами балуюсь))))
Yandex
Объявления
21.09.2011, 22:47     Запись, чтение объектов в файл через указатели.
Ответ Создать тему
Опции темы

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