Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2013, 10:41   #1
F1nt
Пользователь
 
Регистрация: 11.09.2011
Сообщений: 41
По умолчанию Хеш функция

Проблема в записи в файл в функции add. Эта функция записывает с копированием пред информации, но добавленную строчку добавляет в конец. Мб это файл уже открыт и ещё раз открывается? В общем мне нужно чтобы введённые данные нового сотрудника записывались в конец файла. Объясните ошибку.
Код:
#include <stdlib.h>
#include <fstream.h>
#include <conio.h>
#define N 106
 
struct info
    {
     int tab;
     char fam[20];
     float oklad;
     info()
     {
      tab=0; oklad=0;
     }
    };
info T[N];
 
int hesh(int key){ return key % N;}
void forms(char fl[]);//formiruet hesh tabl T iz faila fl
void vivod();//vivod mas T na ekran
int poisk(int p);//funkc vozvrash index zapisi s tab nomerom=p ili -1
void add (info g);//dobavl zapic g v tabl T
 
void main()
    {
     int z,k;
     info m;
     clrscr();
     forms("1.txt");
     cout<<endl;
     vivod();
     cout<<"Vvedidet tab fam oklad novogo sotr:"<<endl;
     cin>>m.tab>>m.fam>>m.oklad;
     add(m);
     vivod();
    /*   for (int i=0; i<3; i++)
     {
     cout<<"\n\nVvedite tab nom poiska:";
     cin>>z;
     k=poisk(z);
     if (k==-1) cout<<"Ne naiden"; else
     cout<<T[k].tab<<'\t'<<T[k].fam<<'\t'<<T[k].oklad<<'\n';
     }
      */
     getch();
    }
/////////////////////////////////////////////////////////////////////////////
void add (info g)
    {
     int j=0;
     int i=hesh(g.tab);
     while (T[i].tab!=0 && j<N)
        {
         i=hesh(i+1);
         j++;
        }
     if (j==N){ cout<<"Tabl perepolnena";getch(); exit (0);}
        else T[i]=g;
    // ofstream Fl("1.txt");
    // Fl<<T[i].tab<<'\t'<<T[i].fam<<'\t'<<T[i].oklad<<'\n';
    }
/////////////////////////////////////////////////////////////////////////////
void forms(char fl[])
    {
     ifstream F(fl);
     info x;
     while (F>>x.tab>>x.fam>>x.oklad)
     add (x);
    }
/////////////////////////////////////////////////////////////////////////////
void vivod()
      {
       cout<<"index tab fam oklad   "<<endl;
       for (int i=0; i<N; i++)
       if (T[i].tab!=0)
       cout<<i<<'\t'<<T[i].tab<<'\t'<<T[i].fam<<'\t'<<T[i].oklad<<'\n';
      }
/////////////////////////////////////////////////////////////////////////////
int poisk(int p)
      {
       int i=hesh(p);
       if (T[i].tab==p) return i; else return -1;
      }
F1nt вне форума Ответить с цитированием
Старый 24.12.2013, 13:50   #2
iDima
Пользователь
 
Регистрация: 30.12.2012
Сообщений: 19
По умолчанию

Чтобы дозаписовать в существующий файл, нужно в ofstream указать параметр ios::app.
Код:
ifstream in("FILE.txt", ios::app);
iDima вне форума Ответить с цитированием
Старый 25.12.2013, 07:57   #3
F1nt
Пользователь
 
Регистрация: 11.09.2011
Сообщений: 41
По умолчанию

Да это я понял, делал
Код:
ofstream Fl("C:\\1.txt", ios::app);
Он до записывает, но и ещё раз копирует в файл повторно, получается что функция add выполняется ещё в функции forms, итого 2 раза, я запутался уже.
F1nt вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ключевая хеш-функция на C++ Protected_fat Помощь студентам 0 09.12.2011 20:21
Почему хеш-функция MD6 не популярна? nicklan Свободное общение 1 05.10.2011 20:10
хеш-функция chyngyz91 Общие вопросы C/C++ 2 12.12.2010 12:32
Хеш-функция pwdan Помощь студентам 4 21.04.2010 12:58
Неправильная хеш функция.(Java) _Studentka_ Помощь студентам 0 09.12.2009 22:54