2 / 1 / 1
Регистрация: 11.11.2018
Сообщений: 79
1

Ошибка при считывании структуры из бинарного файла

28.04.2019, 17:46. Показов 1312. Ответов 4
Метки нет (Все метки)

Всём доброго времени суток. Условие таково. Из файла, открытого в бинарном режиме, считывается информация в структуру.
Если файла нет, то он создаётся и туда помещается заданная информация. При добавлении ещё одного элемента в файл я закрываю программу.
Затем я хочу считать из файла информацию и вывести её, НО читает 2 элемента, выводит первый, который записывается по умолчанию, а добавленный нет, и программа крашится, помогите, не знаю уже что и делать.

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
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
using namespace std;
struct inf
{
    
    char* surname;
    int age;
    char* sex;
    int etap;
    int usp;
};
void output()
{
    inf gas[100];
    int i=0;
    ifstream in("11.txt",ios::binary);
    cout<<setw(1)<<"Surname"<<setw(10)<<"Age"<<setw(11)<<"Sex"<<setw(9)<<"Etap"<<setw(9)<<"Usp\n";
    cout<<"|___________________________________________|\n" ;
   while(in.read((char*)&gas[i],sizeof(gas[i])))
   {
        cout<<setw(1)<<"|"<<gas[i].surname<<setw(10)<<gas[i].age<<setw(11)<<gas[i].sex<<setw(8)<<gas[i].etap<<setw(8)<<gas[i].usp<<"\n";
        i++;
}
    cout<<"|___________________________________________|\n" ;
in.close();
}
void add(int &n)
{
 
inf mas;
    cout<<"\nSurname:";
    mas.surname=new char[30];
    cin>>mas.surname;
    do
    {
      cout<<"\nAge:";
      cin>>mas.age;
    }
    while(mas.age<4||mas.age>50);
    cout<<"\nSex:";
    mas.sex=new char[30];
    cin>>mas.sex;
    do
    {
      cout<<"\nEtap:";
      cin>>mas.etap;
    }
    while(mas.etap<1||mas.etap>6);
    do
    {
      cout<<"\nUsp:";
      cin>>mas.usp;
    }
    while(mas.usp<4||mas.usp>10);
    ofstream of("11.txt",ios::binary| ios::app);
    of.write((char*)&mas,sizeof(mas));
    of.close();
    n++;
}
int main()
{
    inf mas[1000], s;
    int n(0);
    ifstream  in("11.txt", ios::binary);
    if (!in)
    {
        in.close();
        in.clear();
       inf g;
       g.surname=new char[30];
       g.sex=new char[30];
       g.surname="sdfg";g.age=23;g.etap=4;g.sex="male";g.usp=7;
        ofstream f("11.txt", ios::binary);
        f.write((char*)&g, sizeof(g));
        f.close();
        f.clear();
    }
    
    //in.open("11.txt", ios::binary);
    while(in.read((char*)&mas[n], sizeof(mas[n])))
    {
        n++;
    }
    //add(n);
    cout<<n;
    output();
    in.close();
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.04.2019, 17:46
Ответы с готовыми решениями:

При считывании структуры с файла где-то берёт мусор
Задача, в которой нужно сделать структуру из 4 полей: Собственник Авто, Год выпуска Авто, Марка...

Ошибка при считывании файла
Пожалуйста помогите разобраться почему не находит указанный мною файл. #include &lt;windows.h&gt;...

Ошибка при считывании из файла
При считывании файла (есть в архиве, outfile.txt) в 1 строке StringGrid'a (после фиксированной)...

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

4
4618 / 2466 / 1024
Регистрация: 07.02.2019
Сообщений: 6,435
28.04.2019, 19:09 2
Ollavu, Вы уже спрашивали, только в прошлый раз, вместо char* у вас были std::string
0
2 / 1 / 1
Регистрация: 11.11.2018
Сообщений: 79
28.04.2019, 19:16  [ТС] 3
zayats80888, Считывается только 1 элемент, который добавился, когда файла не было, его и выводит.А добавленные элементы нет.
В этом трабл
0
4618 / 2466 / 1024
Регистрация: 07.02.2019
Сообщений: 6,435
28.04.2019, 19:22 4
Лучший ответ Сообщение было отмечено Ollavu как решение

Решение

Ollavu, Трабл в том, что в вашем коде char* является указателем, и расположен в одном месте памяти(там где структура), а то, куда он указывает расположено в другом месте.
1
2 / 1 / 1
Регистрация: 11.11.2018
Сообщений: 79
28.04.2019, 19:24  [ТС] 5
zayats80888, Были бы у нас такие преподаватели как вы, чтобы могли объяснять такие вещи.Спасибо Вам
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.04.2019, 19:24

segmentation fault в считывании из бинарного файла.
Подскажите, пожалуйста, как устранить такую проблемы: Заношу 3 элемента в список, сохраняю их в...

Ошибка при считывании координат с файла
Имеется файл POINTS.TXT, в котором записаны координаты точек (в формате: в одной строчке два числа...

Ошибка, при считывании инфы с файла...
Вот есть код:#include &lt;iostream.h&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; #include &lt;fstream.h&gt;...

Ошибка при считывании матрицы из файла
void readfromfile (FILE * fp, double ** p, int num) { int i,j; for(i=0;i&lt;num;i++) ...


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

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

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