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

Fstream не сохраняются изменения в файле - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Теряется значение в переменной http://www.cyberforum.ru/cpp-beginners/thread326414.html
Всем привет...думаю всем не важно что надо сдавать мне и так далее :D В общем прошу помощи...есть функция, возвращающая номер столбца с самой длинной серией. Проблема в том что походу значение переменной где то теряется...а я не могу понять где :cry: Привожу код и текст ошибки (Программа компилиться, но выкидывает с error'ом когда должна вывести номер столбца) Функция: int poisk2 (int A,...
C++ Распределение памяти При загрузки таблицы загружаются и пересчитываются формулы в ячейках. Скажите пожалуйста почему при размерах от 100*100(строка*столбец) до, примерно, 5000*100 график зависимости времени от размера растет линейно, а от 5000*100 до 10000*100 квадратичная? Заранее спасибо. http://www.cyberforum.ru/cpp-beginners/thread326407.html
Реализация стека FIFO и LIFO C++
Собственно, если у кого-нить будет время посмотреть мои реализации FIFO и LIFO стеков, и высказать замечания, буду очень признателен =) Обычный FIFO стек, универсальный вроде как, вроде правильно с шаблонами разобрался: template <class T> class Stack { private: struct StackEl; StackEl *top; public:
C++ Ошибка в программе обработки строк
Доброго вечера! Подскажите, пожалуйста, из-за чего ошибка. Есть задача: написать функцию, входными параметрами которой является указатель на строку и два символа. функция должна заменить в строке все вхождения первого символа на символ "*" если рядом с этим символом не стоит второй символ. вот мой код: void zam1(char*,char,char); int main() { char s1="caacaa bcbbbcbbbcbc"; char...
C++ Какая-нибудь реализация функции void Fun (double in, double *out) http://www.cyberforum.ru/cpp-beginners/thread326395.html
Подскажите, пожалуйста, какую-нибудь любую реализацию прототипа функции: void Fun (double in, double *out)
C++ отладить програму дана такая задача программы "Данный символьный файл. Учтем, что длина слов не превышает двадцати символов, определить, сколько в файле находится слов, составляя из одного, двух, трех и т.д. символов." не могу понять чего она не компилируется. #include <iostream> #include <fstream> #include <Windows.h> #include <string.h> #include <vector> #include <sstream> подробнее

Показать сообщение отдельно
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,516

Fstream не сохраняются изменения в файле - C++

27.06.2011, 01:56. Просмотров 998. Ответов 4
Метки (Все метки)

Написал вот небольшую программку, но почему-то функции не вносят изменения в исходный файл хотя я и указал что надо принимать файл по ссылке, а не копировать его. Где же я сделал ошибку?
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
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
#include <fstream>
#include <iostream>
#include <iomanip>
#include <string>
#include "ClientData.h"
using namespace std;
 
void update(fstream&, fstream&);
int menu();
void newRecord(fstream &file);
void deleteRecord (fstream&);
void printRecord(fstream&);
 
int main()
{
    fstream file("trans.dat",ios::out|ios::in);
    fstream oldmast("oldmast.dat", ios::in|ios::out);
    ClientData client;
    for (int i=0;i<1000;i++)
     file.write(reinterpret_cast<char*>(&client),sizeof(ClientData));
 
    int select=menu();
    while(select)
    {
        switch(select)
        {
            case 1:
            newRecord(file);
            break;
 
            case 2:
            update(file,oldmast);
            break;
 
            case 3:
            deleteRecord(file);
            break;
 
            case 4:
            printRecord(file);
            break;
 
            default:
            select=menu();
            break;
        }
        cout<<endl<<endl;
        select=menu();
 
    }
}
 
// обновление записей
void update(fstream &temp, fstream &oldmast)
{
    fstream newm("newmast.dat",ios::out|ios::binary|ios::in);
 
    //установить указатели в начало файлов
    temp.seekp(0);
    oldmast.seekp(0);
    newm.seekp(0);
 
    //создать два обьекта типа ClientData
    ClientData client1,client2;
 
    //считать первые строки в файлах
    temp.read(reinterpret_cast<char*> (&client1),sizeof(ClientData));
    oldmast.read(reinterpret_cast<char*> (&client2),sizeof(ClientData));
 
    //пока в файле с бд есть данные
    while(oldmast.eof())
    {
        if(client1.getID()==client2.getID())
        {
            client2.setBalance(client1.getBalance()+client2.getBalance());
            newm.write(reinterpret_cast<char*>(&client2),sizeof(ClientData));
            temp.read(reinterpret_cast<char*> (&client1),sizeof(ClientData));
            oldmast.read(reinterpret_cast<char*> (&client2),sizeof(ClientData));
        }
        else
        {
            newm.write(reinterpret_cast<char*> (&client2),sizeof(ClientData));
            oldmast.read(reinterpret_cast<char*> (&client2),sizeof(ClientData));
        }
    }
 
    //делаем копию актуальных данных из newm.dat в oldmast.dat
    oldmast.clear();
    oldmast.seekp(0);
 
    newm.clear();
    newm.seekp(0);
 
    //читаем первую строку данных в newm.dat
    newm.read(reinterpret_cast<char*> (&client1),sizeof(ClientData));
 
    //пока в newm.dat есть данные
    while(!newm.eof())
    {
        oldmast.write(reinterpret_cast<char*> (&client1),sizeof(ClientData));
        newm.read(reinterpret_cast<char*> (&client1),sizeof(ClientData));
    }
 
    newm.close();
}
 
int menu()
{
    cout<<"Main Menu"<<endl
    <<"1 - new record in db"<<endl
    <<"2 - update all record's in db"<<endl
    <<"3 - delete record in db"<<endl
    <<"4 - print all record in db"<<endl
    <<"0 - EXIT"<<endl
    <<"ENTER YOUR CHOICE:\n? ";
    int choice;
    cin>>choice;
    return choice;
}
 
void newRecord(fstream &file)
{
    cout<<"\nEnter number of the new record:\n? ";
 
    int number;
    string name;
    double balance;
 
    cin>>number;
 
    ClientData client;
 
    //если номер находится в разрешённых границах
    //то считать данные по этому номеру аккаунта
    if(number>0 && number<=1000)
    {
        file.seekp(number-1*sizeof(ClientData));
        file.read(reinterpret_cast<char*>(&client),sizeof(ClientData));
    }
 
    else
    {
        cerr<<"\nError, you enter wrong nubmer";
        return;
    }
 
    //если этот аккаунт пуст то ввести новые данные
    if (client.getID()==0)
    {
        cout<<"\nEnter new information (Name and Balance)";
        cin>>name>>balance;
        client.setName(name);
        client.setBalance(balance);
        file.seekp(number-1*sizeof(ClientData));
        file.write(reinterpret_cast<char*>(&client),sizeof(ClientData));
    }
 
    else
     cerr<<"Account #"<<number<<" already exist.\n";
 
    return;
}
 
void deleteRecord(fstream& del)
{
    ClientData client;
    cout<<"\nEnter # of record to delete:\n? ";
    int number;
    cin>>number;
 
    //если номер находится в разрешённых границах
    //то считать данные по этому номеру аккаунта
    if(number>0 && number<=1000)
    {
        del.seekp(number-1*sizeof(ClientData));
        del.read(reinterpret_cast<char*>(&client),sizeof(ClientData));
    }
 
    else
    {
        cerr<<"\nError, you enter wrong nubmer";
        return;
    }
 
    //если этот аккаунт имеет данные то удалить их
    if (client.getID()!=0)
    {
        ClientData client2;
        del.seekp(number-1*sizeof(ClientData));
        del.write(reinterpret_cast<char*>(&client2),sizeof(ClientData));
        cout<<"\nDone";
    }
 
    else
     cerr<<"Account #"<<number<<" not have any information.\n";
 
    return;
}
 
void printRecord(fstream &print)
{
    cout<<endl<<setw(5)<<left<<"ID"<<setw(10)<<left<<"NAME"<<setw(5)<<left<<"BALANCE"<<endl;
    print.seekp(0);
    ClientData client;
    print.read(reinterpret_cast<char*>(&client),sizeof(ClientData));
    while(!print.eof() && client.getID()!=0)
     cout<<client;
}
Тоесть проблема в том что функции вызываются, работают, но изменений в файл не вносят. Я так понимаю надо как-то по другому хитро передавать файлы функциям чтобы изменения вносились именно в переданный файл?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 20:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru