Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
29 / 29 / 9
Регистрация: 15.03.2010
Сообщений: 146
1

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

15.04.2010, 22:45. Просмотров 760. Ответов 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;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.04.2010, 22:45
Ответы с готовыми решениями:

Работа с бинарными файлами
Хелпаните плз. Вот само задание. Матрицу А действительных чисел размерности M*N (M&lt;N) и вектор...

Работа с бинарными файлами
Создать бинарный файл с информацией о работниках предприятия: 1) фамилия 2) возраст 3)...

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

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

7
1545 / 911 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
15.04.2010, 22:46 2
https://www.cyberforum.ru/cpp-... 17474.html
2. Не вынуждайте людей задавать десяток дополнительных вопросов. Если вылетает ошибка - говорите какая.Приводите свой код. Так будет проще и быстрее.Не пишите,что у вас "не получается",если не пытались.Если пытались и не получается - сразу конкретизируйте,что не так.Если не можете конкретизировать - не упоминайте ваши попытки : вас из лучших побуждений начнут трясти на предмет того,что именно не получается.
0
29 / 29 / 9
Регистрация: 15.03.2010
Сообщений: 146
15.04.2010, 22:50  [ТС] 3
Цитата Сообщение от neske Посмотреть сообщение
я не знаю какое название у ошибки!! с английским я не в ладах...
вставь в компилятор !!!готовый код!!! и посмотри что там за ошибка
0
1545 / 911 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
15.04.2010, 22:51 4
Приношу свои извинения, думал при компиляции ошибки.
0
29 / 29 / 9
Регистрация: 15.03.2010
Сообщений: 146
15.04.2010, 22:59  [ТС] 5
мдяя...ошибка выскакиевает после надписи "нажмите любую главишу для продолжения", т.е программа работает сама по себе, но нормально она закончить свою работу не может

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

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

Запустите прогу и нажмите "1 - из файла"
0
1126 / 785 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
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;
1
29 / 29 / 9
Регистрация: 15.03.2010
Сообщений: 146
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;
так мне нужно прочитать не только строки, но еще и цифры! я в файл записывал структурный вектор, а он состоит из данных разного типа (стринг, инт, дабл)
как мне теперь поэлементно вывести это на экран БЕЗ ОШИБКИ?
0
1126 / 785 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
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";
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.04.2010, 12:57

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Работа с бинарными файлами
Написать программу для обработки информации о планшетах. Информация включает следующие данные: -...

Работа с бинарными файлами
Доброго времени суток! Нашел программу на форуме, она запускается, но файлы бинарные и не...

Работа с бинарными файлами
Создать текстовый файл с произвольным текстом. Разработать программу, которая выводит на экран по...

Работа с бинарными файлами
Задача такова : нужно записать созданные объекты класса в бинарный фал а затем прочитать их же из...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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