Запись и чтение массива из файла - C/C++ - Ответ 17248081

Объясните, почему программа при раскомментированных строках кода работает корректно, и не работает при закомментированных?

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

Почему данные просто не считывается из файла, и возвращается ошибка?

Вероятно, это связано как-то с массивом?

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

Не работает это только с массивом.

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

#include <iostream>
#include <string>
#include <fstream>
#include <windows.h>
#include <vector>
using namespace std;
 
 
class AirTicket
{
private:
    int m_day;
    string m_name;
 
public:
    AirTicket(int day = 0, string name = " ") : m_day(day), m_name(name) { }
 
    int getDay() { return m_day; }
    string getName() { return m_name; }
};
 
 
class TicketBase : public AirTicket
{
private:
    vector<AirTicket> m_base;
 
public:
    TicketBase() : AirTicket()
    {
 
    }
 
    void ListPassenger()
    {
        m_base.resize(3);
        m_base[0] = { 55, "One" };
        m_base[1] = { 88, "Two" };
        m_base[2] = { 77, "Three" };
    }
 
    void print()
    {
        cout << "=== List ===nn";
        for (size_t i{ 0 }; i < m_base.size(); ++i)
            cout << "Line: " << i + 1 << " / " << m_base[i].getDay() << " " << m_base[i].getName() << "nn";
    }
};
 
 
int main() {
    string path = "myFile.txt";
 
    //TicketBase t;
    //t.ListPassenger();
 
    //ofstream fout;
    //fout.open(path);
 
    //fout.write((char)&t, sizeof(TicketBase));
    //fout.close();
 
 
 
    ifstream fin;
    fin.open(path);
 
    TicketBase tt;
    while (fin.read((char)&tt, sizeof(TicketBase)))
    {
        tt.print();
        fin.close();
    }
}

Вернуться к обсуждению:

Запись и чтение массива из файла C/C++