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

Чтение из бинарного файла - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ посчитать макс и мин элемент массива ,сумма между 1-ым и 2-ым положит элементом и упорядочить по определённому принципу http://www.cyberforum.ru/cpp-beginners/thread894099.html
В одномерном массиве состоящем из n вещественных элементов вычислить :1)минимальный и максимальный по модулю элемент массива;2)сумма элеентов,расположенных между первым и вторым положительным...
C++ Работа цикла типа while. Найти ошибку в коде Добрый день. Ребята, помогите, пожалуйста. Не могу понять, что не так. В итоге результат выходит: "Vashe chislo = 0". Само задание в комментарии в коде. Спасибо! // Решения задачи методом... http://www.cyberforum.ru/cpp-beginners/thread894098.html
Дата в текст , не могу доделать C++
Дали тему курсового...преобразование каленарных дат различных форматов в текст ..тоесть нужно чтоб и число,и месяц,и год были записаны словами... пока что разобрался только с месяцами. помогите с...
C++ Выяснить, пройдет ли кирпич с ребрами a,b,c в прямоугольное отверстие со сторонами x и y.
Даны действительные числа a, b, c, x, y. Выяснить, пройдет ли кирпич с ребрами a,b,c в прямоугольное отверстие со сторонами x и y. Просовывать кирпич в отверстие разрешается только так, чтобы каждое...
C++ True или False http://www.cyberforum.ru/cpp-beginners/thread894089.html
Дорогие, форумчаны! Помогите, пожалуйста, написать программу. Написать программу, которая печатает True или False в зависимости от того, выполняются или нет заданные условия: - квадрат заданного...
C++ Нужна блок-схема ! двухмерный массив Помогите с блок-схемой !! Двухмерный массив:help: #include <iostream> #include <stdlib.h> #include <time.h> #include <math.h> #include <conio.h> using namespace std; подробнее

Показать сообщение отдельно
Radgalf
0 / 0 / 0
Регистрация: 08.01.2013
Сообщений: 39
09.06.2013, 15:05  [ТС]
Ну и вот, все что подходило к заданию я добавил, получил следующее:
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
// 53y636.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <fstream>
using namespace std;
fstream writ;    // чтение
ofstream out;    //  запись
ifstream prov;
int vsego=0;
const int X=3;
const int N = 30; 
struct NOTEBOOK {
     
    int x;          //разрешающая способность дисплея по горизонтали
    int y;        //  по вертикали
    float massa;        // масса
    float ix,iy,is;        // габаритные размеры ноутбука в дюймах ВЫСОТАхДЛИНАхШИРИНА
    int mb;        //   максимальный объем ОЗУ в мегабайтах
    int sv;        //   размер видеопамяти в мегабайтах
    float mg;    //   частота процессора в МГц
    float ggb;        // объем HDD в гигабайтах
    int f;                              //  частота регенерации
    float d;                          //  размер диагонали дисплея
    int price;                        //  цена
    char model[N];            //  наименование
}not[X],n[X],y[X];
NOTEBOOK inStruct (NOTEBOOK not[], int i )
{    // Функция чтения данных из файла в структуру
    
    char c;
    
    writ.getline(not[i].model, N);
    
    writ>>not[i].price;
    writ>>not[i].massa;
    writ>>not[i].ix;
    writ>>c;
    writ>>not[i].iy;
    writ>>c;
    writ>>not[i].is;
    writ>>not[i].mg;
    writ>>not[i].mb;
    writ>>not[i].d;
    writ>>not[i].sv;
    writ>>not[i].x;
    writ>>c;
    writ>>not[i].y;
    writ>>not[i].f;
    writ>>not[i].ggb;
    writ.get(); 
    
    return not[i];
}
void fprint(NOTEBOOK n[], int i)
{    //  функция записи в файл "note.dat"
out.write(reinterpret_cast<char*>(&n[i]),sizeof(NOTEBOOK));
};
 
void main()
{int select=0;
int a=0,b=0;
    writ.open("note.txt");
    for (int i=0; i<X; i++ )
        inStruct( not,i );
    writ.close();
 
    ifstream in("note.dat", ios_base::binary);
    if (!in)
    {b++;}
    else{a++;}
    in.close();
 
    if (b==1){
        out.open("note.dat", ios_base::binary|ios_base::out);
        out.write(reinterpret_cast<char*>(&vsego),sizeof(int));
        out.close();
    }
    if (a==1){
        writ.open("note.dat", ios_base::binary|ios_base::in );
        writ.read(reinterpret_cast<char*>(&vsego),sizeof(int));
        writ.close();
    }
 
 
cout<<"M E N U\n-------------------\n";
cout<<"1. Perevod dannih v note.dat\n";
cout<<"2. Vivod dannih iz note.dat na ekran\n";
cout<<"3. Vihod";
while (1)
    {
        cout<<"\nVash vibor? ";
        cin>>select;
 
   switch (select)
        {
        case 1:         
            
            for ( int i=0; i<X; i++ )
            {
                if ( not[i].massa < 7 )
                {
                    vsego++;
                }
            }
 
            out.open("note.dat", ios_base::binary|ios_base::out);
            out.write(reinterpret_cast<char*>(&vsego),sizeof(int));
            out.close();
 
            out.open("note.dat", ios_base::binary|ios_base::out|ios_base::app);
            for ( int i=0; i<X; i++ ){
                if ( not[i].massa < 7 ){
                    fprint( not, i );
                }
            }
            out.close();
            break;
        
        case 2:
            writ.open("note.dat", ios_base::binary|ios_base::in);
            writ.seekp(ios::beg);
            writ.read(reinterpret_cast<char*>(&vsego),sizeof(int));
            writ.seekp(sizeof(int));
            for (int i=0;i<vsego;i++){
                writ.read(reinterpret_cast<char*>(&n[i]),sizeof(NOTEBOOK));
            }
 
            for (int i=0;i<vsego;i++){
                cout<<n[i].x<<"x";
                cout<<n[i].y<<" ";
                cout<<n[i].massa<<" ";
                cout<<n[i].ix<<"x";
                cout<<n[i].iy<<"x";
                cout<<n[i].is<<" ";
                cout<<n[i].mb<<" ";
                cout<<n[i].sv<<" ";
                cout<<n[i].mg<<" ";
                cout<<n[i].ggb<<" ";  
                cout<<n[i].f<<" ";
                cout<<n[i].d<<" ";        
                cout<<n[i].price<<" ";
                cout<<n[i].model<<" \n";
            }
            break;
        case 3:
            exit(0);
            break; 
        }
}
 
}
И вновь появился старый баг, который я описывал в самом первом посте:
при втором процессе записи и чтения, в чтении первые две строки верные, следующие 1 полностью нулевая, через пару таких процессов снова получаю верные данные, а так же простой набор символов.

Так же как вы и советовали, все же изменил текстовый файл и установил размер char до N=30.
Но ситуации это не исправило =(
0
Миниатюры
Чтение из бинарного файла  
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru