0 / 0 / 1
Регистрация: 28.11.2012
Сообщений: 5
1

Ошибка при чтении бинарного файла

28.04.2013, 18:30. Показов 910. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
почему у меня выводит два раза последнюю запись при чтении??(а файл записываю класс с 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
#include "stdafx.h"
 
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class account {
    public:
    int nomer;
char name[80] ;
int kod;
 
void vvod();
void vivod();
 
};
void account::vvod()
{account Rex;
    ofstream out ("accounts", ios::out | ios::binary ) ;
if (!out) {
cout << "Файл вывода открыть невозможной";
exit(0);}
int b1;
cout<<"введите количество записей для ввода"<<endl;
cin>>b1;
 
for(int i=0;i<b1;i++)
{  cout<<"введите номер счета"<<endl;
cin>>Rex.nomer;
cout<<"введите фамилию владельца"<<endl;
fflush(stdin);
gets(Rex.name);
cout<<"введите код счета"<<endl;
cin>>Rex.kod;
 
out.write((char*) &Rex,sizeof(Rex));    
}
out.close();
 
}
void account::vivod()
{account Rex1;
ifstream fin ("accounts", ios::in | ios::binary ) ;
 cout<<"введено"<<endl;
 while(!fin.eof())
 {  
    fin.read((char*) &Rex1,sizeof(Rex1));
 cout<<Rex1.nomer<<" "<<Rex1.name<<" "<<Rex1.kod<<endl;
 
}
 fin.close();
 
 
 system("pause");
}
 
 
int main()
{
    setlocale(LC_ALL,"russian");
    int a=0;
    account ob1;
 
 
 
    for(;;)
    {
    cout<<"1)ввод данных"<<endl;
    cout<<"2)прочесть данные"<<endl;
    cout<<"3)поиск по критериям"<<endl;
    cout<<"4)удаление"<<endl;
    cout<<"5)изменение"<<endl;
    cout<<"6)выход"<<endl;
    cin>>a;
    switch (a)
        {
    case 1:
        ob1.vvod();
        break           ;
        case 2:
            ob1.vivod();
            break;
            case 3:
                break;
                case 4:
                    break;
                    case 5:
                        break;
                        case 6:exit(0);break;
    }
    }
 
return 0;
}
Добавлено через 25 минут
если записывают одну запись(из 3 полей),то при чтении у меня выводится 2 раза последняя запись
я уже не знаю где искать ошибку

Добавлено через 35 минут
может while не правильно записал?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.04.2013, 18:30
Ответы с готовыми решениями:

Ошибка при чтении/записи из бинарного файла
Сделал простую программу для работы с бинарными файлами, но когда запускаю ее вылетает ошибка....

"Нарушение прав доступа при чтении по адресу" при чтении структур из бинарного файла
Пытаюсь разобраться со структурами в бинарных файлах. Допустим, есть массив структур. Записываю...

Вылет при чтении из бинарного файла
Уважаемые товарищи, пожалуйста, помогите понять почему приведённые ниже функции, записывающие или...

Лишние символы при чтении бинарного файла
Добрый день, форумчане! Прошу помочь разобраться с проблемой. Программа преобразовывает...

2
381 / 352 / 113
Регистрация: 17.05.2012
Сообщений: 1,049
28.04.2013, 18:33 2
родя, сделай так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void account::vivod()
{account Rex1;
ifstream fin ("accounts.txt", ios::binary | ios::in  ) ;
 cout<<"введено"<<endl;
 fin.read((char*) &Rex1,sizeof(account));
 while(!fin.eof())
 {  
     cout<<Rex1.nomer<<" "<<Rex1.name<<" "<<Rex1.kod<<endl;
    fin.read((char*) &Rex1,sizeof(account));
}
 fin.close();
 
 
 system("pause");
}
1
0 / 0 / 1
Регистрация: 28.11.2012
Сообщений: 5
28.04.2013, 23:34  [ТС] 3
Цитата Сообщение от yoghurt92 Посмотреть сообщение
родя, сделай так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void account::vivod()
{account Rex1;
ifstream fin ("accounts.txt", ios::binary | ios::in  ) ;
 cout<<"введено"<<endl;
 fin.read((char*) &Rex1,sizeof(account));
 while(!fin.eof())
 {  
     cout<<Rex1.nomer<<" "<<Rex1.name<<" "<<Rex1.kod<<endl;
    fin.read((char*) &Rex1,sizeof(account));
}
 fin.close();
 
 
 system("pause");
}
сейчас попробую

Добавлено через 2 часа 10 минут
Цитата Сообщение от yoghurt92 Посмотреть сообщение
родя, сделай так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void account::vivod()
{account Rex1;
ifstream fin ("accounts.txt", ios::binary | ios::in  ) ;
 cout<<"введено"<<endl;
 fin.read((char*) &Rex1,sizeof(account));
 while(!fin.eof())
 {  
     cout<<Rex1.nomer<<" "<<Rex1.name<<" "<<Rex1.kod<<endl;
    fin.read((char*) &Rex1,sizeof(account));
}
 fin.close();
 
 
 system("pause");
}
о)спасибо большое ,работает
только нужно написать не "accounts.txt" а accounts)))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.04.2013, 23:34
Помогаю со студенческими работами здесь

Почему при чтении бинарного файла происходит экстренное завершение программы?
в Windows XP при чтение бинарного файла происходит екстренное завершение программы !!! /*Writing...

Ошибка при чтении файла
Есть вот такой код: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;iomanip&gt; #include...

Ошибка при чтении файла
Необработанное исключение по адресу 0x0FE4172C (msvcp140d.dll) в .exe: 0xC0000005: нарушение прав...

Ошибка при чтении из файла
Файл открывается, но читаться из него информация не хочется. Исходник int c_array ::...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru