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

Не могу прочитать из файла в класс - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Работа с текстом http://www.cyberforum.ru/cpp-beginners/thread1037441.html
Нужно найти двузначные числа в введенном пользователем тексте, скопировать их в новую переменную и вывести на экран.
C++ Лабиринт. Найти ошибку в коде не компилирует почему?помогите Требуется вычислить площадь комнаты в квадратном лабиринте. Формат входных данных В первой строке вводится число N – размер лабиринта (3 <= N <= 10). В следующих N... http://www.cyberforum.ru/cpp-beginners/thread1037439.html
Хорошо написанный код C++
Очень хочется почитать хорошо написанный, структурированный и читабельный код, дабы вынести из этого урок и научиться хорошо программировать на С++. Есть ли какие-нибудь хорошие источники,...
Двумерные массивы C++
Даны квадратные матрицы А(nxn), B(nxn), C(nxn). Написать программу вычисления матрицы (А+В)*С. Помогите решить, пожалуйста!
C++ С++ Двумерные массивы http://www.cyberforum.ru/cpp-beginners/thread1037426.html
Даны квадратные матрицы А(nxn), B(nxn), C(nxn). Написать программу вычисления матрицы (А+В)*С. Помогите решить, пожалуйста!
C++ Сколько же мне осталось Доброго времени суток. Хочу узнать как можно реализовать на C++ Builder и с помощью компонентов календарный счётчик. К примеру в одном календаре мы берём какую-то дату и в другом таком же... подробнее

Показать сообщение отдельно
ElenaBilyk
4 / 4 / 1
Регистрация: 22.10.2013
Сообщений: 34
11.12.2013, 18:36  [ТС]
Я в функции CreateStudent() создаю динамический массив студентов. Затем инициализирую одной из двух функций. И, получается, что массив студентов ложится один за одним 96 байт, а после них, по порядку их опыт, ну наверное, что бы было легче считывать обратно в массив.

Добавлено через 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
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
Students::Students(int Size)
{
    if (Size != 0)
    {
        CreateStudent(Size);
        m_SizeAr = Size;
    }
    else 
    {
        m_SizeAr = 0;
        St = 0;
    }
    //std::cout<<"Create an object with parameters "<<Size<<' '<<this<<'\n';    
}
 
void Students::CreateStudent(int Size)
{
    static int Count = 0;
    if(Count >= 1)      //на тот случай, если вызывали ее из конструктора
    {
        std::cout<<"You already create students array\n";
        return;
    }
    St = new student [Size];
    for(int i = 0; i < Size; ++i)
    {
        St[i].Age = 0;
        St[i].Experience = 0;
        St[i].GPA = 0;
        for(int j = 0; j < 5; ++j)
            St[i].Marks[j] = 0;
        St[i].Name[0] = 0;
        St[i].Surname[0] = 0;   
    }
    m_SizeAr = Size;
    Count++;
}
 
void Students::InitUser()
{
    using std::cout;
    for(int i = 0; i < m_SizeAr; ++i)
    {
        cout<<"Enter data for the "<<i + 1<<" student:\n";
        cout<<"Enter the name:\n";
        std::cin.getline(St[i].Name, 19);
        St[i].Name[strlen(St[i].Name) + 1] = '\0';
        cout<<"Enter the surname:\n";
        std::cin.getline(St[i].Surname, 19);
        St[i].Surname[strlen(St[i].Surname) + 1] = '\0';
        cout<<"Enter age: ";
        std::cin>>St[i].Age;
        cout<<"Enter 5 marks separated by spaces:\n";
        for(int j = 0; j < 5; ++j)
            std::cin>>St[i].Marks[j];
        St[i].GPA = 0;
        for(int j = 0; j < 4; ++j)
            St[i].GPA += St[i].Marks[j];
        St[i].GPA /= 5;
        while(std::cin.get() != '\n')
            continue;
        cout<<"Enter the "<<St[i].Name<<" experience(100 characters): \n";
        int Size = 1, Step = 2;
        St[i].Experience = new char [Size];
        int Count = 0, j = 0;   
        std::cin.get(St[i].Experience[j]);
        while(St[i].Experience[j] != '\n')
        {
            j++;
            if(j >= Size)
            {
                char * Temp = new char [Size + Step];
                memcpy(Temp, St[i].Experience, sizeof(char) * Size);
                Size += Step;
                delete [] St[i].Experience;
                St[i].Experience = Temp;
            }
            Count++;
            std::cin.get(St[i].Experience[j]);      
        }       
        St[i].Experience[Count] = '\0';     
    }
    
}
 
 
void Students::WriteToFile(char * NameFile)             //запись в файл
{
    std::ofstream fout;
    fout.open(NameFile);
    if(!fout.is_open()) 
    {
        std::cout<<"\nFile not open! Sorry...Bay...\n";
        exit(EXIT_FAILURE);
    }   
    for(int i = 0; i < m_SizeAr; ++i)
    {
        fout<<St[i].Name<<' '<<St[i].Surname<<'\n';
        fout<<"Age: "<<St[i].Age<<'\n';
        fout<<"Marks: ";
        for(int j = 0; j < 5; ++j)
            fout<<St[i].Marks[j]<<' ';
        fout<<'\n';
        fout<<"GPA: "<<St[i].GPA<<'\n';
        fout<<"-----------------------------------------------------\n";
    }
    for(int i = 0; i < m_SizeAr; ++i)
        fout<<"Experience: "<<St[i].Experience<<'\n';
 
    std::cout<<"File written.\n";
    fout.close();
}
Добавлено через 16 минут
Ладно, допустим, при записи в файл, я в какую-то переменную записываю расстояние от начала файла до своего опыта, вычислив его по такой формуле - первый студент получает 96 байт * на кол-во студентов(m_SizeAr) + strlen(свой опыт), второй студент - те же 96 байт * на кол-во студентов(m_SizeAr) + strlen(опыт предыдущего) + strlen(свой опыт).
Теперь вопрос, как при чтении из файла в структуры этим воспользоваться.?
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru