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

Запись в бинарный файл - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Одномерные массивы; на ЯП Си, среда – Borland C++5.02 http://www.cyberforum.ru/cpp-beginners/thread326965.html
Здравствуйте! Помогите, пожалуйста, выполнить следующее задание: Задать целочисленный массив размером N. Поменять местами серии с минимальной и максимальной длиной. Если таких серий несколько, то любые из них. Серия – последовательность одинаковых элементов в массиве. Один элемент – серия с длиной равной 1.:impossible: Заранее спасибо всем кто откликнется!!!:flirt: Добавлено через 20...
C++ Сформировать массив Массив Y сформировать по правилу Yi=cos2ix/(2i-1)(2i+1), x вводить с клавиатуры. Определить количество элементов yi<1.2 среди элементов с нечетными номерами и сумму элементов с четными порядковыми номерами. http://www.cyberforum.ru/cpp-beginners/thread326941.html
C++ Вычислить величину
Дана непустая последовательность положительных вещественных чисел x1, x2, … , xn (n заранее не известно), за которой следует отрицательное число. Вычислить величину nx1 + (n–1)x2 + … + 2xn-1 +xn.
C++ Обработка строки
здравствуйте. такая задача: написать функцию, входным параметром которой является указатель на строку. функция должна вернуть количество слов в строке, у которых первый и последний символ совпадают. я тут кое-чего набыдлокодил, да и то не работает. если можно поправьте существующее решение, чтобы оно работало или предложите более лучшее решение: int quantity(char*); int main() { char s1="...
C++ подсчитать количество цифр http://www.cyberforum.ru/cpp-beginners/thread326930.html
Для целого неотрицательного числа n подсчитать количество цифр в десятичной, шестнадцатеричной, восьмеричной и двоичной системах счисления.
C++ Доступ к классу как к контейнеру Здравствуйте, не подскажите как нужно определить класс-контейнер, что бы можно было получать данные путем такого обращения : Подробнее: class kont{ int arr; } kont::kont{ for(int a=0;a<4;a++) arr = a; } void main(void){ подробнее

Показать сообщение отдельно
Shepard90
5 / 5 / 0
Регистрация: 18.10.2010
Сообщений: 140

Запись в бинарный файл - C++

28.06.2011, 04:48. Просмотров 2049. Ответов 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
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
#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <vector>
#include "conio.h"
using namespace std;
 
struct scan_info{
char model[25]; // наименование модели 25 байт
int price; // цена 4 байта
double x_size; // горизонтальный размер области сканирования 8 байт
double y_size; // вертикальный размер области сканирования 8 байт
int optr; // оптическое разрешение 4 байта
int grey; // число градаций серого 4 байта
bool YesData; //левая переменная 1 байт
};//54 байта
 
void InBinFile(char * FileName, vector<scan_info> mass, short Count);
vector<scan_info> insert(int position,vector<scan_info> mass,scan_info *Data);
void SetNull(scan_info *Data);
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    vector<scan_info> Arr;
    setlocale(LC_ALL, "Rus");
    short count=0;
    int position;
    char FileName[80];
    int choice;
    cout<<"Введите имя файла"<<endl;
    cin>>FileName;
    cout<<"Выберите действие: 1-Добавить блок данных, 2-Выход"<<endl;
    cin>>choice;
    while(choice==1) //заполняем структуру
    {
                count=count+1;
                scan_info* MyScan=new scan_info;
                cout<<"Модель: "<<endl;
                cin>>MyScan->model;
                cout<<"Цена: "<<endl;
                cin>>MyScan->price;
                cout<<"Длина: "<<endl;
                cin>>MyScan->x_size;
                cout<<"Ширина: "<<endl;
                cin>>MyScan->y_size;
                cout<<"Оптическое разрешение: "<<endl;
                cin>>MyScan->optr;
                cout<<"Число градаций серого: "<<endl;
                cin>>MyScan->grey;
                cout<<"Введите позицию в бинарном файле, куда будет помещен блок данных: ";
                MyScan->YesData=true;
                cin>>position;
                Arr=insert(position,Arr,MyScan);
                //Arr.push_back(*MyScan);
                cout<<"Выберите действие: 1-Добавить блок данных, 2-Выход"<<endl;
                cin>>choice;
    }
    InBinFile(FileName,Arr,count);
}
 
void InBinFile(char * FileName, vector<scan_info> mass, short Count)//запись в файл
{
    ofstream fout(FileName,ios::binary);
    if(!fout)
    {
        cout<<"Unable to open "<<FileName<<" for writing.\n";
        return;
    }
    fout<<Count<<endl;
    vector<scan_info>::iterator in=mass.begin();
    while(in!=mass.end())
    {
        //fileout.write((char*)&Count,sizeof Count);
        fout.write((char *)&in,sizeof(scan_info));
        ++in;
    }
    fout.close();
 
}
 
void SetNull(scan_info *Data)//обнуление полей структуры
{
    for(int i=0;i<25;i++)
        Data->model[i]=0;
    Data->price=0;
    Data->grey=0;
    Data->optr=0;
    Data->x_size=0;
    Data->y_size=0;
    Data->YesData=false;
}
 
vector<scan_info> insert(int position,vector<scan_info> mass,scan_info *Data)//заносим данные в вектор
{
    int i=0;
    int size=mass.size();
    scan_info* NullScan=new scan_info;
    SetNull(NullScan);
    if(size<=position)
    {
        while(i!=position-size)
        {
            mass.push_back(*NullScan);
            i++;
            
        }
        mass.push_back(*Data);
    }
    
    else
    {
        mass.at(position)=*Data;
    }
    return mass;
}
Проблема возникает именно на выводе в файл. В результате в нем оказывается что-то совершенно не то(не нулей, не вводимых данных). Хотя вектор верно заполняется. Может я write как-то неправильно использую или экземпляр ofstream не так создаю.

Подскажите плз в чем косяк-то или я чет не догоняю может
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru