Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

15.04.2010, 22:45. Просмотров 648. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.04.2010, 22:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что за ошибка?? (Работа с бинарными файлами) (C++):

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

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

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

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

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

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

7
neske
1508 / 875 / 84
Регистрация: 26.03.2010
Сообщений: 2,988
15.04.2010, 22:46 #2
http://www.cyberforum.ru/cpp-beginners/thread17474.html
2. Не вынуждайте людей задавать десяток дополнительных вопросов. Если вылетает ошибка - говорите какая.Приводите свой код. Так будет проще и быстрее.Не пишите,что у вас "не получается",если не пытались.Если пытались и не получается - сразу конкретизируйте,что не так.Если не можете конкретизировать - не упоминайте ваши попытки : вас из лучших побуждений начнут трясти на предмет того,что именно не получается.
0
I_like_C++
29 / 29 / 4
Регистрация: 15.03.2010
Сообщений: 146
Завершенные тесты: 1
15.04.2010, 22:50  [ТС] #3
я не знаю какое название у ошибки!! с английским я не в ладах...
вставь в компилятор !!!готовый код!!! и посмотри что там за ошибка
0
neske
1508 / 875 / 84
Регистрация: 26.03.2010
Сообщений: 2,988
15.04.2010, 22:51 #4
Приношу свои извинения, думал при компиляции ошибки.
0
I_like_C++
29 / 29 / 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 - из файла"
0
Alex5
1102 / 763 / 119
Регистрация: 12.04.2010
Сообщений: 1,936
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
I_like_C++
29 / 29 / 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;
так мне нужно прочитать не только строки, но еще и цифры! я в файл записывал структурный вектор, а он состоит из данных разного типа (стринг, инт, дабл)
как мне теперь поэлементно вывести это на экран БЕЗ ОШИБКИ?
0
Alex5
1102 / 763 / 119
Регистрация: 12.04.2010
Сообщений: 1,936
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
17.04.2010, 12:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.04.2010, 12:57
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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