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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
I_like_C++
28 / 28 / 4
Регистрация: 15.03.2010
Сообщений: 146
Завершенные тесты: 1
#1

Что за ошибка?? (Работа с бинарными файлами) - C++

15.04.2010, 22:45. Просмотров 638. Ответов 7
Метки нет (Все метки)

скажите, что за "левая" ошибка вылазит после оканчания программы???
вот код
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <ctime>
using namespace std;
struct pokupatel
{
    string fio;
    unsigned int nomer;
    double schet;
};
void createfile(char file1[])//создание файла с именами, фамилиями и случайными номерами кридитных карточек и счетами
{
    string len;
    ofstream f1;                            
    f1.open(file1);                 
    if (f1.is_open()) 
    {
        for(int i=0; i<15; i++)
        {
            switch(i)
            {
            case 0: len="Petrov Pavel Pavlovich";break;
            case 1: len="Eremin Ivan Ivanovich";break;
            case 2: len="Ivanov Egor Vasilich";break;
            case 3: len="Malikov Afanasiy Alanovich";break;
            case 4: len="Mitin Valeriy Timurovich";break;
            case 5: len="Baldwin William Egorovich";break;
            case 6: len="Cecil Robert Eduardovich";break;
            case 7: len="Dennis Ralph Antonovich";break;
            case 8: len="Godfrey Richard Petrovich";break;
            case 9: len="Johnes John Mihaylovich";break;
            case 10: len="Bond James Sergeevich";break;
            case 11: len="Henry Peter Dmitrievich";break;
            case 12:len="Owen Nikole Rinatovich";break;
            case 13: len="Reynolds Amanda Petrovna";break;
            case 14: len="Fox Megan Zaharovna";
            }
            f1<<len<<endl;
            f1<<rand()%100000+99999<<endl;
            if (i==14)
                f1<<rand()%10000+9999;
            else 
                f1<<rand()%10000+9999<<endl;
        }
    }
    f1.close();
}
vector<pokupatel> createvec1(char file1[])//функция для формирования вектора из элементов структурного типа из файла
{
    vector<pokupatel> V1;
    ifstream f2(file1);
    if (f2)
    {
        while (!f2.eof())
            {
                pokupatel temp;
                string str;
                f2 >> str;
                temp.fio=str;
                temp.fio+=" ";
                f2 >> str;
                temp.fio+=str;
                temp.fio+=" ";
                f2 >> str;
                temp.fio+=str;
                f2 >> temp.nomer;
                f2 >> temp.schet;
                V1.push_back(temp);
            }
    }
   f2.close();
   return V1;
}
vector<pokupatel> read(int n)//создание структурированного вектора с клавиатуры
{
    vector<pokupatel> f1;
    for(int i=0;i<n;i++)
    {
        pokupatel temp;
        string str, x;
        cout<<"Введите фамилию покупателя: ";
        cin>>str;
        temp.fio+=str;
        temp.fio+=" ";
        cout<<"Введите имя покупателя: ";
        cin>>str;
        temp.fio+=str;
        temp.fio+=" ";
        cout<<"Введите отчество покупателя: ";
        cin>>str;
        temp.fio+=str;
        /*
        cout<<"Введите номер кредитной карточки: ";
        cin>>temp.nomer;
        cout<<"Введите счет покупателя(в рублях): ";
        cin>>temp.schet;
        */
        temp.nomer=rand()%1001+1000;
        temp.schet=rand()%1001+1000;
        f1.push_back(temp);
    }
    return f1; 
}
void display(const vector<pokupatel> &v1)//вывод вектора структyрного типа на экран
{
    cout << "\n=================================================\n";
    int n=v1.size();
    for (int i=0; i< n; i++)
        cout<<i+1<<".fio: "<<v1[i].fio<<"\n   nomer: "<< v1[i].nomer<<"\n   schet: "<<v1[i].schet<<" rub"<<endl;  
    cout << "Общее количество: " << n << endl;
}
void infile(char file2[], const vector<pokupatel> &v1)
{
    ofstream f3(file2, std::ios::binary);//открываем файл для записи
    int n=v1.size();
    if(f3.is_open())
    { 
        for(int i = 0; i < n; i++) // выводим массив в файл поэлементно
        {
            f3.write((char *)&v1[i].fio, sizeof(string));
            f3.write( (char *)&v1[i].nomer, sizeof(unsigned int) );
            f3.write((char *)&v1[i].schet, sizeof(double));
        }
        f3.close();
    } 
}
void outbinfile(char file2[])// открываем файл для чтения 
{
    ifstream f4(file2, std::ios::binary);
    while(!f4.eof())
    {
        pokupatel temp;
        f4.read( (char*)&temp.fio, sizeof(temp.fio));
        f4.read((char*)&temp.nomer, sizeof(temp.nomer));
        f4.read((char*)&temp.schet, sizeof(temp.schet));
        if (f4.eof())
            break;
        cout<<temp.fio<<" - "<<temp.nomer<<" - "<<temp.schet<<"\n";
    }
    f4.close();
    cout<<endl;
}
int main()
{
    setlocale (0,"Russian");
    srand((unsigned)time(0));
    char file1[] = "c:/file.txt", file2[] = "c:/binfile1.bin", file3[] = "c:/Out.txt";
    vector<pokupatel> v1;
    int q;
    cout<<"Методы заполнения вектора структурированными данными:\n1-из файла\n2-с клавиатуры\n0-выход\nВвод: ";
    cin>>q;
    switch(q)
    {
    case 0:break;
    case 1:
        {
            createfile(file1);//создание файла с именами, фамилиями и случайными номерами кридитных карточек и счетами
            v1=createvec1(file1);//функция для формирования вектора из элементов структурного типа из файла
        }break;
    case 2:
        {
            int n;
            cout<<"Задайте количество покупателей: ";
            cin>>n;
            v1=read(n);//создание структурированного вектора с клавиатуры
        }break;
    default: cout<<"Выбран неверный метод\n";
    }
    display(v1);
    infile(file2,v1);
    outbinfile(file2);
    
system("pause");
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2010, 22:45     Что за ошибка?? (Работа с бинарными файлами)
Посмотрите здесь:

Работа с Бинарными файлами - C++
Помогите сделать сохранение не могу разобраться :( Почему в этом коде #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;windows.h&gt; ...

Работа с бинарными файлами - C++
Помогите решить проблему. Задача: создать файл записать в него 10 структур и закрыть, затем добавить еще 3, а после вывести их все на...

Работа с бинарными файлами - C++
Создать текстовый файл с произвольным текстом. Разработать программу, которая выводит на экран по желанию пользователя: а) N первых строк...

Работа с бинарными файлами - C++
Помогите пожалуйста, уже перерыла все книги и весь инет, и чего-либо понятного мне не нашла..(( Мне нужно вывести на экранбинарный файл с...

Работа с бинарными файлами и структурами - C++
Вылетает ошибка в методе Print. Может подскажите, а? Заранее спасибо! #ifndef CLASSLIBCARD_H #define CLASSLIBCARD_H #include...

Работа с текстовыми и бинарными файлами - C++
Дан файл вещественных чисел. Заменить в нем все элементы на их квадраты.

Работа с текстовыми и бинарными файлами - C++
Дан файл вещественных чисел. Заменить в нем все элементы на их квадраты

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
neske
1479 / 846 / 75
Регистрация: 26.03.2010
Сообщений: 2,904
15.04.2010, 22:46     Что за ошибка?? (Работа с бинарными файлами) #2
http://www.cyberforum.ru/cpp-beginners/thread17474.html
2. Не вынуждайте людей задавать десяток дополнительных вопросов. Если вылетает ошибка - говорите какая.Приводите свой код. Так будет проще и быстрее.Не пишите,что у вас "не получается",если не пытались.Если пытались и не получается - сразу конкретизируйте,что не так.Если не можете конкретизировать - не упоминайте ваши попытки : вас из лучших побуждений начнут трясти на предмет того,что именно не получается.
I_like_C++
28 / 28 / 4
Регистрация: 15.03.2010
Сообщений: 146
Завершенные тесты: 1
15.04.2010, 22:50  [ТС]     Что за ошибка?? (Работа с бинарными файлами) #3
я не знаю какое название у ошибки!! с английским я не в ладах...
вставь в компилятор !!!готовый код!!! и посмотри что там за ошибка
neske
1479 / 846 / 75
Регистрация: 26.03.2010
Сообщений: 2,904
15.04.2010, 22:51     Что за ошибка?? (Работа с бинарными файлами) #4
Приношу свои извинения, думал при компиляции ошибки.
I_like_C++
28 / 28 / 4
Регистрация: 15.03.2010
Сообщений: 146
Завершенные тесты: 1
15.04.2010, 22:59  [ТС]     Что за ошибка?? (Работа с бинарными файлами) #5
мдяя...ошибка выскакиевает после надписи "нажмите любую главишу для продолжения", т.е программа работает сама по себе, но нормально она закончить свою работу не может

после нажатия любой клавиши вылетает какая ошибка
нажимаю континье и вылазит новая вкладка со стрелачкой которая указывает на это
" /* verify block type */
_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));
"
могу скинуть весь текст вкладки если тебе нужно!!! но по моему тебе будет лешче самому вставить мой не до конца рабочий код в свой компилятор

Erorr'ы и Warning'и компилятор не выдает!!!

Запустите прогу и нажмите "1 - из файла"
Alex5
1049 / 712 / 105
Регистрация: 12.04.2010
Сообщений: 1,790
16.04.2010, 01:41     Что за ошибка?? (Работа с бинарными файлами) #6
C++
1
2
3
// Не следует так делать
                        f3.write((char *)&v1[i].fio, sizeof(string));
                f4.read( (char*)&temp.fio, sizeof(temp.fio));
Нам неизвестна заранее длина строки. А Вы записываете 16 байт. Потом читаете 16 байт.

C++
1
2
3
4
5
6
7
8
9
    f3.write((char *)v1[i].fio.c_str(), v1[i].fio.length()+1  );
    // ...length() плюс 1,  чтобы '\0' тоже был записан в файл
    //  Чтобы при чтении из файла можно было определить, где кончается строка.
 
    // How to read  from  file  to string ?
    char buf[1000] = {0};
    f4.getline( buf, sizeof(buf), '\0' ); // читать, пока не встретится  '\0'
    // f4 >>  temp.fio; // так будет прочитано только одно слово
    temp.fio =  buf;
I_like_C++
28 / 28 / 4
Регистрация: 15.03.2010
Сообщений: 146
Завершенные тесты: 1
16.04.2010, 09:04  [ТС]     Что за ошибка?? (Работа с бинарными файлами) #7
Цитата Сообщение от Alex5 Посмотреть сообщение
C++
1
2
3
// Не следует так делать
                        f3.write((char *)&v1[i].fio, sizeof(string));
                f4.read( (char*)&temp.fio, sizeof(temp.fio));
Нам неизвестна заранее длина строки. А Вы записываете 16 байт. Потом читаете 16 байт.

C++
1
2
3
4
5
6
7
8
9
    f3.write((char *)v1[i].fio.c_str(), v1[i].fio.length()+1  );
    // ...length() плюс 1,  чтобы '\0' тоже был записан в файл
    //  Чтобы при чтении из файла можно было определить, где кончается строка.
 
    // How to read  from  file  to string ?
    char buf[1000] = {0};
    f4.getline( buf, sizeof(buf), '\0' ); // читать, пока не встретится  '\0'
    // f4 >>  temp.fio; // так будет прочитано только одно слово
    temp.fio =  buf;
так мне нужно прочитать не только строки, но еще и цифры! я в файл записывал структурный вектор, а он состоит из данных разного типа (стринг, инт, дабл)
как мне теперь поэлементно вывести это на экран БЕЗ ОШИБКИ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.04.2010, 12:57     Что за ошибка?? (Работа с бинарными файлами)
Еще ссылки по теме:

Работа с бинарными файлами. Определение четности - C++
Создать бинарный файл f и записать в него целые числа. Организовать просмотр бинарного файла и его обработку: Найти все четные числа и их...

Visual c++. Работа с бинарными файлами и структурами - C++
Всем привет. Да, есть похожие темы, но я ответа не нашел. В общем, у меня есть *.h файл в нем находиться класс #ifndef LOADING_H ...

Работа с бинарными файлами (программка дважды записывает последнее число) - C++
Добрый день, помогите пожалуйста с такой ситуацией: написал програмку для заполнения бинарного файла рандомными числами (их количество...

Работа с бинарными файлами: какой способ работает наиболее быстро при записи и считывании? - C++
Всем привет прошу помощи по этой теме. Попробую изложить кратко: 1) Есть не бинарный файл -&gt; Считываю его ifstream -&gt; работаю с данными...

Задача с бинарными файлами - C++
Реализовать программу, работающую с бинарным файлом f1, который содержит массив строк различной длины. Строка должна быть описана...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Alex5
1049 / 712 / 105
Регистрация: 12.04.2010
Сообщений: 1,790
17.04.2010, 12:57     Что за ошибка?? (Работа с бинарными файлами) #8
Цитата Сообщение от I_like_C++ Посмотреть сообщение
структурный вектор, а он состоит из данных разного типа (стринг, инт, дабл)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//struct pokupatel{
//        string fio;
//        unsigned int nomer;
//        double schet;
//};
// const vector<pokupatel> &v1
//
// записать в   ofstream f3   структуру  struct pokupatel
                        f3.write((char *)v1[i].fio.c_str(), v1[i].fio.length()+1  );
                        f3.write( (char *)&v1[i].nomer, sizeof(unsigned int) );
                        f3.write((char *)&v1[i].schet, sizeof(double));
// прочитать   struct pokupatel    из потока  f4
                getline( f4, temp.fio , '\0');
                f4.read((char*)&temp.nomer, sizeof(temp.nomer));
                f4.read((char*)&temp.schet, sizeof(temp.schet));
Обратите внимание на length()+1 и аргумент '\0' в getline()

Цитата Сообщение от I_like_C++ Посмотреть сообщение
как мне теперь поэлементно вывести это на экран БЕЗ ОШИБКИ?
I_like_C++ , Вы же сами написали
C++
1
2
// Вывод на экран     struct pokupatel temp
                cout<<temp.fio<<" - "<<temp.nomer<<" - "<<temp.schet<<"\n";
Yandex
Объявления
17.04.2010, 12:57     Что за ошибка?? (Работа с бинарными файлами)
Ответ Создать тему
Опции темы

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