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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Алгоритм работы функции qsort http://www.cyberforum.ru/cpp-beginners/thread130390.html
Всем добрый день, у меня тут небольшая просьба. Кому не трудно, выложите пожалуйста простой алгоритм функции qsort, а то я ее немного не догоняю. В интернете инфы много нашла, но там нет ничего...
C++ Справочник: данные из ячейки не выводятся на экран проблема в чём: данные из ячейки не выводятся на экран. Как это исправить? #include <iostream.h> #include <stdlib.h> #include <string.h> using namespace std; struct record { char surname ; http://www.cyberforum.ru/cpp-beginners/thread130381.html
C++ Сдача курсовой
Динамическая обработка информация о наличии автобусов в парке. Справочные сведения: Указание:Сведения о каждом автобусе содержат: 1. № автобуса; 2. фамилию и инициалы водителя; 3. номер...
C++ Сформировать список, состоящий из чисел входящих в последовательность n!!
Сформировать список, состоящий из чисел входящих в последовательность n!! (факториал чётных чисел) n заданно пользователем. n!!=2*4*6…*n кто то осилит???
C++ Опишите структуру с именем STUDENT http://www.cyberforum.ru/cpp-beginners/thread130358.html
Задание звучит так: "Описать структуру студенты, содержащую информацию о студентах группы: фамилия, имя, отчество, год рождения, курс, форма обучения. Создать массив таких структур и заполнить его....
C++ Ввод переменных в одну строчку Всем привет, я запрашиваю переменную с помощью функции scanf, но после этого нужно нажимать клавишу Enter. Скажите, есть ли такая функция в Си, где после запроса можно клавишу Enter не нажимать, а то... подробнее

Показать сообщение отдельно
DJFile
0 / 0 / 0
Регистрация: 11.04.2010
Сообщений: 31

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

16.05.2010, 14:07. Просмотров 1264. Ответов 0
Метки (Все метки)

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
#include "fstream"
#include "iostream"
#include "windows.h"
using namespace std;
 
struct scan_info{
    char model[25]; // наименование модели
    int price; // цена
    double x_size; // горизонтальный размер области сканирования
    double y_size; // вертикальный размер области сканирования
    int optr; // оптическое разрешение
    int grey; // число градаций серого
};
 
void write_file(const char *file_name, const unsigned short num_w);
int working_file(const char *file_name, const unsigned short num_w);
 
int main(){
    setlocale(LC_CTYPE, "Russian_Russia.1251");
    cout << "Создать новый файл? y/n ";
    char choice;
    unsigned short num_w;
    char file_name[15];
    do{
    cin >> choice;
    if (choice=='y'){
        cout << "Введите имя файла для записи:";
        cin.ignore(1);
        cin.getline(file_name,14);
        cout << "Введите число записей:";
        cin >> num_w;
        cin.ignore(1);
        write_file(file_name, num_w);
        break;
    }
    if (choice=='n') break;
    }
    while (choice!='y' || choice!='n');
    system("cls");
    cout << "Введите имя файла для чтения или q:";
    cin.ignore(1);
    cin.getline(file_name, 14);
    if (*file_name=='q') exit(1);
    cout << "Введите номер замещаемой записи:";
    cin >> num_w;
    working_file(file_name, num_w);
    system("pause");
    return 0;
}
 
void write_file(const char *file_name, const unsigned short num_w){
    scan_info *Scaners = new scan_info[num_w];
 
    /*Ввод структуры*/
    for(int i=0; i<num_w; i++){
        cout << "\nЗапись №"<<i+1;
        cout << "\nВведите модель:";
        cin.getline(Scaners[i].model, 24);
        Scaners[i].model[25]='\0';
        cout << "Введите цену:";
        cin >> Scaners[i].price;
        cout << "Введите горизонтальный размер области сканирования:";
        cin >> Scaners[i].x_size;
        cout << "Введите вертикальный размер области сканирования:";
        cin >> Scaners[i].y_size;
        cout << "Введите оптическое разрешение:";
        cin >> Scaners[i].optr;
        cout << "Введите число градаций серого:";
        cin >> Scaners[i].grey;
        cin.ignore(1);
    }
 
    /*Создание файла и запись в него*/
    ofstream fout(file_name, ios::out | ios::binary);
    if(fout.fail()){
        cerr << "Ошибка открытия выходного файл\n";
        system("pause");
        exit(1);
    }
    fout.write(reinterpret_cast<const char*>(&num_w), sizeof(short));
    for (int i=0; i<num_w; i++){
    fout.write(Scaners[i].model, sizeof Scaners->model);
    fout.write(reinterpret_cast<const char*>(&Scaners[i].price), sizeof Scaners->price);
    fout.write(reinterpret_cast<const char*>(&Scaners[i].x_size), sizeof Scaners->x_size);
    fout.write(reinterpret_cast<const char*>(&Scaners[i].y_size), sizeof Scaners->y_size);
    fout.write(reinterpret_cast<const char*>(&Scaners[i].optr), sizeof Scaners->optr);
    fout.write(reinterpret_cast<const char*>(&Scaners[i].grey), sizeof Scaners->grey);
    }
    fout.close();
}
 
int working_file(const char *file_name, const unsigned short num_w){
    fstream fin(file_name, ios::binary | ios::_Nocreate |ios::in | ios::out);
    fin.seekg(ios::beg);
    if(fin.fail()){
        cerr << "Ошибка открытия выходного файла\n";
        return -1;
    }
    unsigned short num;
    fin.read(reinterpret_cast<char*>(&num),sizeof (short));
    if (num_w>num){
        cerr << "Такой записи не существуе!\n";
        return -1;
    }
    scan_info Scaners_p;
    fin.seekg((num_w-1)*sizeof Scaners_p, ios::cur);
    fin.read(Scaners_p.model,sizeof Scaners_p.model);
    fin.read(reinterpret_cast<char*>(&Scaners_p.price), sizeof Scaners_p.price);
    fin.read(reinterpret_cast<char*>(&Scaners_p.x_size), sizeof Scaners_p.x_size);
    fin.read(reinterpret_cast<char*>(&Scaners_p.y_size), sizeof Scaners_p.y_size);
    fin.read(reinterpret_cast<char*>(&Scaners_p.optr), sizeof Scaners_p.optr);
    fin.read(reinterpret_cast<char*>(&Scaners_p.grey), sizeof Scaners_p.grey);
 
    cout << "\nЗапись №"<<num_w;
    cout << "\nМодель:";
    cout << Scaners_p.model;
    cout << "\nЦена:";
    cout << Scaners_p.price;
    cout << "\nГоризонтальный размер области сканирования:";
    cout << Scaners_p.x_size;
    cout << "\nВертикальный размер области сканирования:";
    cout << Scaners_p.y_size;
    cout << "\nОптическое разрешение:";
    cout << Scaners_p.optr;
    cout << "\nЧисло градаций серого:";
    cout << Scaners_p.grey << endl;
    cin.ignore(1);
    fin.close();
    return 0;
}
Программа записывает все введённые данные, но вывести может только 1ю запись, на всех остальных считывание по байтам как бы "уезжает". Помогите.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru