Форум программистов, компьютерный форум 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
08.06.2013, 18:08  [ТС]
Это снова я, и снова с той же программой.
Сейчас код немного изменился:
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
// 53y636.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <fstream>
using namespace std;
fstream writ;    // чтение
ofstream out;    //  запись
ifstream prov;
int vsego=0;
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[20];            //  наименование
}not[3],n[3],y[3];
NOTEBOOK inStruct (NOTEBOOK not[], int i )
{    // Функция чтения данных из файла в структуру
    char c;
    for ( int j = 0; j<19; j++ )
    {
        writ.get(c);
        not[i].model[j] = c;
    }
    not[i].model[19] = '\0';
    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;
    return not[i];
};
void fprint(NOTEBOOK n[], int i)
{    //  функция записи в файл "note.dat"
out.write(reinterpret_cast<char*>(&n[i]),sizeof(NOTEBOOK));
};
 
void main()
{ const int X=3;
int select=0;
int a=0,b=0;
    writ.open("note.txt");
    NOTEBOOK not[X],n[X],y[X];
    for (int i=0; i<X; i++ )
        inStruct( not,i );
    writ.close();
    writ.clear();
 
    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));
            for (int i=0;i<vsego;i++){
                writ.read(reinterpret_cast<char*>(&y[i]),sizeof(NOTEBOOK));
            }
 
            for (int i=0;i<vsego;i++){
                cout<<y[i].x<<"x";
                cout<<y[i].y<<" ";
                cout<<y[i].massa<<" ";
                cout<<y[i].ix<<"x";
                cout<<y[i].iy<<"x";
                cout<<y[i].is<<" ";
                cout<<y[i].mb<<" ";
                cout<<y[i].sv<<" ";
                cout<<y[i].mg<<" ";
                cout<<y[i].ggb<<" ";  
                cout<<y[i].f<<" ";
                cout<<y[i].d<<" ";        
                cout<<y[i].price<<" ";
                cout<<y[i].model<<" \n";
            }
            break;
        case 3:
            exit(0);
            break; 
        }
}
 
}
Но в нем появилась новая фича:
когда мы запускаем программу, жмем 1, затем 2. Все норм. на консоле видны 2 объекта, как и положено, но стоит еще раз нажать 1 и 2, как появляются еще 2 объекта, и почему то не такие же как предыдущие...

При втором выполнении:
C++
1
2
3
for (int i=0;i<vsego;i++){
writ.read(reinterpret_cast<char*>(&y[i]),sizeof(NOTEBOOK));
}
первые два объекта считываются нормально, а вот последние, отвратительно(набор цифр и символов), хотя при записи в файл все происходит ровно...

В этот раз прилагаю текстовый файл с объектами.

Надеюсь кто-нибудь да поможет, уже устал с этими потоками возиться =(
0
Вложения
Тип файла: txt note.txt (229 байт, 8 просмотров)
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru