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

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

Войти
Регистрация
Восстановить пароль
 
Valentina
68 / 68 / 3
Регистрация: 13.05.2012
Сообщений: 130
#1

чтение из файла - C++

02.08.2013, 19:22. Просмотров 394. Ответов 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
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
#include <fstream>        // для файлового ввода/вывода
#include <iostream>
using namespace std;
 
const int len=32;
const int maxen=100;
 
class name{
private:
  unsigned long number;
  char imia[len];  
  char sername[len]; 
  char familia[len];
  static int n;
  static name* arrap[];
public:
    
    void set_info()
    {
        cin.ignore(10,'\n');
        cout<<"Введите имя работника: "<<endl;
     cin>> imia ;
     cout<<"Введите отчество: "<<endl;
     cin>> sername ;
     cout<<"Введите фамилию: "<<endl;
     cin>> familia ;
     cout<<"Введите номер работника: "<<endl;
     cin>> number ;
    }
    void get_info()
    {
  cout<<"имя работника: "<<endl<<imia<<endl
      <<"отчество: "<<endl<<sername<<endl
      <<"фамилия: "<<endl<<familia<<endl
      <<"номер работника: "<<endl<<number<<endl;
  }
    static void add();
    static void display();
    static void read();
    static void write();
  
 
};
int name::n;
name* name::arrap[maxen];
void name::add()
{
    arrap[n]=new name;
    arrap[n++]->set_info();
}
void name::display()
{
    for(int j=0;j<n;j++)
    {
        cout<<(j+1);
        cout<<"Работник: "<<endl;
        arrap[j]->get_info();
        cout<<endl;
    }
}
//Записать все объекты, хранящиеся в памяти, в файл
void name::write()
  {
  int size;
  name na;
  cout << "Идет запись " << n << " работников.\n";
  ofstream ouf;           // открыть ofstream в двоичном виде
  
 
  ouf.open("EMPLOY.txt", ios::app | ios::binary);
  if(!ouf)
    { cout << "\nНевозможно открыть файл\n"; return; }
  
    
    ouf.write( (char*)&na, sizeof(na) );
    for(int j=0; j<n; j++)  
       ouf.write( (char*)(arrap[j]), sizeof(name) );
    if(!ouf)
      { cout << "\nЗапись в файл невозможна\n"; return; }
}
  
//---------------------------------------------------------
//чтение всех данных из файла в память
void name::read()
  {
  int size;               // размер объекта employee 
  name na;
  ifstream inf;           // открыть ifstream в двоичном виде
  inf.open("EMPLOY.txt", ios::binary);
  if(!inf)
    { cout << "\nНевозможно открыть файл\n"; return; }
  n = 0;                  // В памяти работников нет
  while(true)
    {                     // чтение типа следующего работника
    inf.read( (char*)&na, sizeof(na) );
    if( inf.eof() )       // выход из цикла по EOF
      break;
    if(!inf)              // ошибка чтения типа
      { cout << "\nНевозможно чтение типа\n"; return; }
        arrap[n] = new name;
    inf.read( (char*)arrap[n], sizeof(name)  );
    if(!inf)              // ошибка, но не EOF
      { cout << "\nЧтение данных из файла невозможно\n"; return; }
    n++;                  // счетчик работников увеличить
    }  //end while
  cout << "Идет чтение " << n << " работников\n";
  }
///////////////////////////////////////////////////////////
 
 
 
int main()
{
    setlocale (LC_CTYPE,"rus");
    char ch;
  while(true)
    {
    cout << "'a' – добавление сведений о работнике"
          <<"\n'd' - вывести сведения обо всех работниках"
          <<"\n'w' – записать все данные в файл"
          <<"\n'r' – прочитать все данные из файла"
          <<"\n'x' - выход"
          <<"\nВаш выбор: ";
    cin >> ch;
    switch(ch)
      {
      case 'a':           // добавить работника
        name::add(); break;
      case 'd':           // вывести все сведения
        name::display(); break;
      case 'w':           // запись в файл
        name::write(); break;
      case 'r':           // чтение всех данных из файла
        name::read(); break;
      case 'x': exit(0);  // выход
      default: cout << "\nНеизвестная команда";
      }  //end switch
    }  //end while
system ("pause");
return 0;
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.08.2013, 19:22     чтение из файла
Посмотрите здесь:

Чтение из файла - C++
Проясните, пожалуйста, один вопрос: есть файл такого содержания - 12 23 32 43 45 95 Простейшая программа: #include&lt;iostream&gt; ...

чтение из файла - C++
в блокноте есть массив вещественных чисел.числа в каждой строчке разделены пробелами. нужно считать их таким образом, чтобы каждый...

чтение из файла - C++
у меня вопрос как мне допустим из файла rab.txt считать строку по байтам? Добавлено через 7 минут help

Чтение из файла - C++
хочу прочесть из фалай пример txt втору строку первый символ пробывал fgets читает &quot;все&quot; какие варианты еще есть чтения из...

Чтение из файла C++ - C++
ввожу код из книги демидовича на тему вывода данных из файла на экран а он не рабочий, помогите пожалуйста я сделал свой код но все равно...

Чтение из файла - C++
Не могу найти ссылки на чтение из файла в стиле C и C++. Дайте пожалуйста ссылки на вашем форуме!

Чтение из файла - C++
Хочу считать файл посимвольно и определить сколько в нем слов, а уже затем создать массив этих слов. Но почему-то функция getc не работает,...

Чтение файла в 16-СС - C++
Здравствуйте, как можно реализовать следующее: Нужно открыть файл для чтения в бинарном режиме, считывать по три байта и записывать их в...

Чтение из файла - C++
Необходимо считать последовательность чисел из файла в массив. Есть функция которая это реализует. На вход ей подается имя файла и еще один...

Чтение с файла - C++
Добрый день. Подскажите пожалуйсто. В файле .dat маходятся по три числа в строке(445.345 43.54 345.34) их разделяют пробелы. Как мне...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2013, 20:51     чтение из файла #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//чтение всех данных из файла в память
void name::read()
  {
  int size;               // размер объекта employee 
  name na;
  ifstream inf;           // открыть ifstream в двоичном виде
  inf.open("EMPLOY.txt", ios::binary);
  if(!inf)
    { cout << "\nНевозможно открыть файл\n"; return; }
  n = 0;                  // В памяти работников нет
  
  inf.read( (char*)&na, sizeof(na) );// чтение типа следующего работника
  while(true)
    {                     
        arrap[n] = new name;
        inf.read( (char*)arrap[n], sizeof(name)  );
        if (inf.eof()) break;
        if(!inf)              // ошибка, но не EOF
        { cout << "\nЧтение данных из файла невозможно\n"; return; }
        n++;                  // счетчик работников увеличить
     }  //end while
     cout << "Идет чтение " << n << " работников\n";
  }
Pakisan
14 / 14 / 1
Регистрация: 04.01.2013
Сообщений: 61
02.08.2013, 20:52     чтение из файла #3
Меня смущает то, что вы приводите name к (char*) и после этого пишете в файл. Не нужно так.
C++
1
2
3
stream.write(name.name, strlen(name.name);
...
stream<<"some divider";
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.08.2013, 21:00     чтение из файла #4
Но лучше, наверное, так (там память до считывания выделяется, будет утечка):
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
//чтение всех данных из файла в память
void name::read()
  {
  int size;               // размер объекта employee 
  name na;
  ifstream inf;           // открыть ifstream в двоичном виде
  inf.open("EMPLOY.txt", ios::binary);
  if(!inf)
    { cout << "\nНевозможно открыть файл\n"; return; }
  n = 0;                  // В памяти работников нет
  
  inf.read( (char*)&na, sizeof(na) );// чтение типа следующего работника
  while(true)
    {                     
        arrap[n] = new name;
        inf.read( (char*)arrap[n], sizeof(name)  );
        if (inf.eof())
        {
            delete arrap[n]; 
            break;
        }
        if(!inf)              // ошибка, но не EOF
        { 
            cout << "\nЧтение данных из файла невозможно\n";
            delete arrap[n];
            return; 
        }
        n++;                 // счетчик работников увеличить
     }  //end while
     cout << "Идет чтение " << n << " работников\n";
  }
Yandex
Объявления
02.08.2013, 21:00     чтение из файла
Ответ Создать тему
Опции темы

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