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

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

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

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

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

09.04.2010, 19:52. Просмотров 3579. Ответов 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, что б его определить по достижении конца файла?
Дальше, что б вводить данные из структуры, нужно ж в эту структуру изначально что-то положить. Это нужно сделать до начала работы с файлом? Или только при условии, что мы будем записывать в файл(если так, то как?)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru