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

Запись/вывод структуры в файл - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Записать каждое число в виде целой десятичной, восмеричной и шестнадцатиричной константы http://www.cyberforum.ru/cpp-beginners/thread130071.html
Помогите сделать задания пожалуйста... для всё проблематично так что расчитываю на вышу помощь господа... 1.1)Записать каждое число в виде целой десятичной, восмеричной и шестнадцатиричной...
C++ Визуальная среда. Свойства формы. Нужна помощь. Проблема в следующем: хотелось бы сделать невозможным изменение размеров формы, но, если ставлю AutoSize=true, то размеры формы изменить нельзя, но они ставятся очень маленькими, строго... http://www.cyberforum.ru/cpp-beginners/thread130059.html
Решите по C++ с объяснениями C++
Пожалуйста помогите решить задачи с объяснениями. Заранее, спасибо. 1. Создать класс Massiv (матрица вещественных чисел), количество строк и столбцов константные поля. Ввод размера матрицы...
Массив... C++
Дан одномерный массив целых чисел A40. Массив заполнить значениями путем ввода с клавиатуры. Проверить, является ли левая половина массива (первые 20 элементов) точной копией правой половины массива...
C++ Функция window() http://www.cyberforum.ru/cpp-beginners/thread130032.html
Здравствуйте уважаемые гуру! Напишите пожайлуста мне функцию установки размера рабочей области консоли. Испульзую gcc, на dec c++, но функцию window() он не видет, которая по идеи должна быть...
C++ Преобразовать массив!!! Всем привет!помогите,кто сможет!вот задача,но не до конца.....там нужно закончить третьим заданием! 3)преобразовать массив таким образом,чтобы сначала распологались все элементы,целая часть которых... подробнее

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

Запись/вывод структуры в файл - C++

15.05.2010, 19:03. Просмотров 4608. Ответов 8
Метки (Все метки)

Здравствуйте. Само задание:
Написать функцию, которая динамически выделяет память под массив структур (не меньше шести элементов), заполняет его данными в режиме диалога и записывает массив в бинарный файл. Структура файла: в первых двух байтах размещается значение типа int, определяющее количество сделанных в файл записей; далее без пропусков размещаются записи о сканерах. Написать функцию, которая запрашивает данные о сканере в режиме диалога и замещает записи в бинарном файле по заданному номеру. Обязательный параметр — номер замещаемой записи. Функция должна возвращать нулевое значение, если запись прошла успешно, и -1 в противном случае. Привести пример программы, оздающей файл с данными о сканерах (данные вводятся с клавиатуры) из не менее восьми записей и осуществляющий вставку новых данных о сканере.
Все необходимые данные для функций должны передаваться им в качестве параметров.
Использование глобальных переменных в функциях не допускается.

Я вроде реализовал воод:
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
#include "fstream"
#include "iostream"
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 int num_w);
 
int main(){
    setlocale(LC_CTYPE, "Russian_Russia.1251");
    cout << "Введите имя файла для записи:";
    char file_name[15];
    cin >> file_name;
    cout << "Введите число записей:";
    int num_w;
    cin >> num_w;
    cin.ignore(1);
    write_file(file_name, num_w);
    system("pause");
    return 0;
}
 
void write_file(const char *file_name, const int num_w){
    scan_info *Scaners = new scan_info[num_w];
    ofstream fout(file_name, ios::out | ios::binary);
    if(fout.fail()){
        cerr << "Ошибка открытия выходного файла";
        exit(1);
    }
    fout.write((char*)&num_w,2);
    /*Ввод структуры*/
    for(int i=0; i<num_w; i++){
        cout << "\nЗапись №"<<i+1;
        cout << "\nВведите модель:";
        cin.getline(Scaners[i].model, 24);
        fout.write(Scaners[i].model, sizeof Scaners[i].model);
        cout << "Введите цену:";
        cin >> Scaners[i].price;
        fout.write((char*)&Scaners[i].price, 5);
        cout << "Введите горизонтальный размер области сканирования:";
        cin >> Scaners[i].x_size;
        fout.write((char*)&Scaners[i].x_size, 5);
        cout << "Введите вертикальный размер области сканирования:";
        cin >> Scaners[i].y_size;
        fout.write((char*)&Scaners[i].y_size, 5);
        cout << "Введите оптическое разрешение:";
        cin >> Scaners[i].optr;
        fout.write((char*)&Scaners[i].optr, 5);
        cout << "Введите число градаций серого:";
        cin >> Scaners[i].grey;
        fout.write((char*)&Scaners[i].grey, 5);
        cin.ignore(1);
    }
    fout.close();
}
Подскажите, всё ли верно? А то в файле китайские иероглифы какие-то, только слова норм? И как потом такой файл считать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru