39 / 26 / 18
Регистрация: 30.09.2014
Сообщений: 142
1

Записать в бинарный файл массив объектов Student (бинарный файловый ввод/вывод)

20.01.2016, 19:58. Показов 3388. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Стоит задача записать в бинарный файл массив объектов student:
C++
1
2
3
4
5
6
7
8
9
10
class student
{
    string firstname,lastname, group;
    char year;
    bool sex;
public:
    void setStudent();
    bool getSex() { return sex; }
    friend ostream& operator<<(ostream &os, student &s);
};
, после чего вывести на экран из файла студентов женского пола. Я эту функцию реализовал так:
C++
1
2
3
4
5
6
7
8
9
void RD(ifstream &f) 
{
    student t;
    f.open("INFO.DAT",ios::binary);
    if (f.is_open())
        while ((f.read((char*)&t, sizeof(t))))
            if (!(t.getSex())) cout << t;
    f.close();
}
Она работает, но итераций производится на одну больше, чем есть записей в файле, в результате чего возникает ошибка доступа. Интересно то, что если в hex-редакторе дописать в конец файла 88 байт (а именно 88 байт занимает один объект класса student), из которых все, кроме 85-го (пол - поставим 0x01 - мужской) и 88-го (0x1A - как я понял, конец файла), то файл читается нормально. В чем здесь ошибка?

Добавлено через 13 минут
Прошу прощения, опечатался: не массив объектов, просто объекты последовательно
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.01.2016, 19:58
Ответы с готовыми решениями:

Реализовать вывод массива объектов типа Student на консоль (файловый ввод/вывод)
Как сделать чтобы список студентов выводился на экран в конце? #include&lt;iostream&gt; ...

Бинарный файловый ввод/вывод: реализовать операции для работы с массивом структур типа WORKER
Здравствуйте, видел очень много подобных программ, но у меня особый случай в общем суть программы:...

В массиве объектов пользовательского типа Student найти студентов с лучшей успеваемостью (файловый ввод/вывод)
Помогите с кодом плиз! Буду благодарен) Определите студентов с лучшей успеваемостью, то есть с...

Бинарный ввод\вывод в файл
#include &lt;fstream&gt; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; class Person {...

2
31 / 34 / 18
Регистрация: 30.09.2011
Сообщений: 202
20.01.2016, 20:32 2
Попробуй так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
void RD(ifstream &f) 
{
    student t;
    f.open("INFO.DAT",ios::binary);
    if (f.is_open())
        while (f)
        {
            f.read((char*)&t, sizeof(t));
            if (!(t.getSex())) cout << t;
        }
    f.close();
}
1
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
20.01.2016, 20:49 3
Цитата Сообщение от artem2302 Посмотреть сообщение
string firstname,lastname, group;
Классы с такими полями не годятся для стандартных бинарных методов записи/чтения.

Добавлено через 3 минуты
Бинарный файл, ошибка при чтении символов
1
20.01.2016, 20:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.01.2016, 20:49
Помогаю со студенческими работами здесь

Написать структуру "Список книг" (бинарный файловый ввод/вывод)
Здравствуйте, Дорогие форумчане! Всех с наступающим. Задача: написать 2 консольных приложения:...

Ввод и вывод структуры в бинарный файл
Всем привет, друзья! Как вообще происходит Ввод и вывод структуры в бинарный файл. Можете...

Динамический массив объектов и бинарный файл
Не получается считать с файла данные в динамический массив объектов, но если использовать...

Ввод/вывод структуры в текстовый и бинарный файл
есть код #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include...


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

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

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