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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ регистр сдвига???? http://www.cyberforum.ru/cpp-beginners/thread114774.html
На вход поступают числа: 10111 00101 11111 (к примеру) на регистр поступает старший разряд каждого миниблока(в каждом миниблоке 5 двоичных чисел) Регистр сдвига осуществляет задержку на 4 тактов,...
C++ Рассматривая комплексное число как структуру, состоящую из двух вещественных полей, составить функции выполнения четырех арифметических операций Задание 3. Рассматривая комплексное число как структуру, состоящую из двух вещественных полей, составить функции выполнения четырех арифметических операций с комплексными числами. Как это... http://www.cyberforum.ru/cpp-beginners/thread114765.html
Не могу использовать std C++
Привет! Возможно туповатая ошибка :) Суть: Создаю в VS2008 пустое консольное приложение Win32, добавляю файлик .cpp помещаю туда функцию main() и т. д. все работает Добавляю класс MY в проект...
C++ скажите пожалуйста где моя ошыбка...
Даны вещественные числа a,b,c,d,e,f.Переменноый S присвоить значение 1, если оба уравнения ах2 + bх + с = 0 и dx2 + ex + f = 0.для нахождения корней квадратного уравнения использовать функцию. ...
C++ C++. Массивы и указатели/ Функции. http://www.cyberforum.ru/cpp-beginners/thread114756.html
Помогите, пожалуйста, решить!!! Я знаю, что это просто. Но я только начинаю изучать C. И до меня никак не доходит! №1. Написать два варианта программы: без применения указателей и с указателями....
C++ Как сделать так чтобы число выводилось десятичной дробью Как сделать так чтобы число выводилось десятичной дробью к примеру int x; x=1/4; и сдесь код который выводит число printf не работает (сразу вылетает окно с ошибкой когда доходит до него) ... подробнее

Показать сообщение отдельно
ssi
5 / 5 / 3
Регистрация: 24.01.2010
Сообщений: 52

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

09.04.2010, 19:52. Просмотров 3724. Ответов 1
Метки (Все метки)

3. Написать процедуры (или функции) записи в файл и считывания из файла массива структур.
4. Использовать файлы трех типов – текстовый (.TXT), типизированный (.REC) и бинарный (.BIN).
5. При сохранении данных в файл программа должна проверять, были ли какие-либо данные ранее введены или загружены из файла. Если нет, то позволить ввести их с клавиатуры. Если да – то спросить о предпочтительном действии (использовать уже имеющиеся данные или ввести новые). Таким образом, программа должна позволять преобразовывать один вид файлов в другие. Т.е. можно загрузить файл одного типа, и сохранить данные в файле другого типа.
6. При работе с типизированным файлом в файл пишутся только данные из массива структур. При чтении количество структур определяется по достижению конца файла.
7. При работе с текстовым файлом данные пишутся построчно. Количество структур можно сохранять в файле (в самой первой его строке) либо определять при чтении файла по достижению его конца.
8. При работе с бинарным файлом количество структур сохраняется в файле. При сохранении и загрузке массива структур использовать функции блочной записи/чтения, чтобы обрабатывать весь массив одним вызовом такой функции.
Собственно:
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
//---------------------------------------------------------------------------
#include <condefs.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream.h>
#pragma hdrstop
//---------------------------------------------------------------------------
//#include "WinToDOS.h"
//---------------------------------------------------------------------------
#pragma argsused
//---------------------------------------------------------------------------
enum operation {op_read = 1, op_write, op_exit};
enum filetype  {ft_txt = 1, ft_bin, ft_typ};
//---------------------------------------------------------------------------
struct opisanie //структура
{
    char avrnazv[50]; //параметры стуктуры автор, название
    char mestoizdan[50]; //место издания, издание, год
    int k;
 
 
};
//--------------------------------------------------------------------------------------------
void ftxt(char *fname, opisanie *o, int &n, operation op)
{
    strcat(fname, ".txt");
    FILE *f = fopen(fname, op == op_read ? "rt" : "wt");
    if(op == op_read)
    {
        fscanf(f, "%d\n", &n);
        for(int i = 0; i < n; i++)
        {
            fscanf(f, "%[^\n]s", o[i].avrnazv);
            fgetc(f);
            fscanf(f, "%[^\n]s", o[i].mestoizdan);
            fgetc(f);
            fscanf(f, "%d\n", &o[i].k);
        }
    }
    else
    {
        fprintf(f, "%d\n", n);
        for(int i = 0; i < n; i++)
        {
            fprintf(f, "%s\n", o[i].avrnazv);
            fprintf(f, "%s\n", o[i].mestoizdan);
            fprintf(f, "%d\n", o[i].k);
        }
    }
    fclose(f);
}
 
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
 
void bin(char *fname, opisanie *o, int n, operation op)
{
    strcat(fname, ".bin");
    FILE *f = fopen(fname, op == op_read ? "rt" : "wt");
    if (op == op_read)
        {
            fwrite(&n, sizeof(int), 1, f);
            fwrite(o, sizeof(opisanie), n, f);
        }
}
//--------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------
 
int main()
{
 
    filetype ft;
    char fname;
    int i, k, n;
    operation op;
    opisanie o[100];//задаем массив стуктур
printf("Действие: 1-читать / 2-писать / 3-выход:\n");
scanf("%d", &i);
 
op = operation(i);
printf("тип: 1-txt / 2-typ / 3-bin:\n");
 
scanf("%d", &i);
ft = filetype(i);
//cin >> fname;
//scanf("%s", fname);
switch(ft)
        {
        case ft_txt: ftxt(&fname, o, n, op);
        //case ft_bin:
        //case ft_typ:
        }
 
/*printf("Введите через пробел:\nАвтор Название\nГород: Из-во, год кол-во страниц\n");
*/
 
clrscr();
 
getch();
return 0;
}
Для начала, я и сам знаю, что код АДовый
Рассмотреть только функцию void ftxt(char *fname, opisanie *o, int &n, operation op) (!!!)
А теперь серьёзно, имеются вот такие вопросы:
При записи в файл n, ей присваивается адское значение. Отсюда вопрос: как так нужно записывать структуру в файл, не зная изначально n, что б его определить по достижении конца файла?
Дальше, что б вводить данные из структуры, нужно ж в эту структуру изначально что-то положить. Это нужно сделать до начала работы с файлом? Или только при условии, что мы будем записывать в файл(если так, то как?)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru