Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2010, 07:38   #1
ssi
 
Регистрация: 24.01.2010
Сообщений: 6
По умолчанию Запись структуры в файл.

3. Написать процедуры (или функции) записи в файл и считывания из файла массива структур.
4. Использовать файлы трех типов – текстовый (.TXT), типизированный (.REC) и бинарный (.BIN).
5. При сохранении данных в файл программа должна проверять, были ли какие-либо данные ранее введены или загружены из файла. Если нет, то позволить ввести их с клавиатуры. Если да – то спросить о предпочтительном действии (использовать уже имеющиеся данные или ввести новые). Таким образом, программа должна позволять преобразовывать один вид файлов в другие. Т.е. можно загрузить файл одного типа, и сохранить данные в файле другого типа.
6. При работе с типизированным файлом в файл пишутся только данные из массива структур. При чтении количество структур определяется по достижению конца файла.
7. При работе с текстовым файлом данные пишутся построчно. Количество структур можно сохранять в файле (в самой первой его строке) либо определять при чтении файла по достижению его конца.
8. При работе с бинарным файлом количество структур сохраняется в файле. При сохранении и загрузке массива структур использовать функции блочной записи/чтения, чтобы обрабатывать весь массив одним вызовом такой функции.
Собственно:
Код:
//---------------------------------------------------------------------------
#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, что б его определить по достижении конца файла?
Дальше, что б вводить данные из структуры, нужно ж в эту структуру изначально что-то положить. Это нужно сделать до начала работы с файлом? Или только при условии, что мы будем записывать в файл(если так, то как?)
ssi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Структуры,запись в бинарные файлы,массивы(С++) TOSHH Общие вопросы C/C++ 1 10.10.2009 02:01
Запись структуры TList в файл, проблема с длинными строками типа AnsiString Xardas Общие вопросы Delphi 2 24.05.2009 20:18
Запись структуры и чтение из файла [MI_nor] Общие вопросы C/C++ 6 08.04.2009 15:52
Проблема с записью структуры в файл JamS007 Общие вопросы C/C++ 5 07.01.2009 23:13
Сохранение в файл сложной динамической структуры _Инженер_ Общие вопросы Delphi 24 20.10.2008 09:38