С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
родя
0 / 0 / 1
Регистрация: 28.11.2012
Сообщений: 5
1

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

28.04.2013, 18:30. Просмотров 499. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2013, 18:30
Ответы с готовыми решениями:

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

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

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

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

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

2
yoghurt92
375 / 346 / 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2013, 23:34

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

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

Ошибка при чтении из файла
Помогите разобраться с чтением из файла. Листинг указан ниже. Программа...


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

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

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