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

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

Восстановить пароль Регистрация
 
I_like_C++
14 / 14 / 1
Регистрация: 15.03.2010
Сообщений: 126
15.04.2010, 22:45     Что за ошибка?? (Работа с бинарными файлами) #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
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++ Работа с бинарными файлами
Работа с текстовыми и бинарными файлами C++
Работа с текстовыми и бинарными файлами C++
C++ Работа с Бинарными файлами
C++ Работа с бинарными файлами. Определение четности
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
15.04.2010, 22:46     Что за ошибка?? (Работа с бинарными файлами) #2
http://www.cyberforum.ru/cpp-beginners/thread17474.html
2. Не вынуждайте людей задавать десяток дополнительных вопросов. Если вылетает ошибка - говорите какая.Приводите свой код. Так будет проще и быстрее.Не пишите,что у вас "не получается",если не пытались.Если пытались и не получается - сразу конкретизируйте,что не так.Если не можете конкретизировать - не упоминайте ваши попытки : вас из лучших побуждений начнут трясти на предмет того,что именно не получается.
I_like_C++
14 / 14 / 1
Регистрация: 15.03.2010
Сообщений: 126
15.04.2010, 22:50  [ТС]     Что за ошибка?? (Работа с бинарными файлами) #3
я не знаю какое название у ошибки!! с английским я не в ладах...
вставь в компилятор !!!готовый код!!! и посмотри что там за ошибка
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
15.04.2010, 22:51     Что за ошибка?? (Работа с бинарными файлами) #4
Приношу свои извинения, думал при компиляции ошибки.
I_like_C++
14 / 14 / 1
Регистрация: 15.03.2010
Сообщений: 126
15.04.2010, 22:59  [ТС]     Что за ошибка?? (Работа с бинарными файлами) #5
мдяя...ошибка выскакиевает после надписи "нажмите любую главишу для продолжения", т.е программа работает сама по себе, но нормально она закончить свою работу не может

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

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

Запустите прогу и нажмите "1 - из файла"
Alex5
883 / 618 / 81
Регистрация: 12.04.2010
Сообщений: 1,552
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++
14 / 14 / 1
Регистрация: 15.03.2010
Сообщений: 126
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++ Работа с бинарными файлами (программка дважды записывает последнее число)
Visual c++. Работа с бинарными файлами и структурами C++
Работа с бинарными файлами и структурами C++

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

Или воспользуйтесь поиском по форуму:
Alex5
883 / 618 / 81
Регистрация: 12.04.2010
Сообщений: 1,552
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     Что за ошибка?? (Работа с бинарными файлами)
Ответ Создать тему
Опции темы

Текущее время: 15:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru