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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.05.2010, 22:26   #1
Infa-Red
Новичок
Джуниор
 
Регистрация: 10.05.2010
Сообщений: 3
По умолчанию borland C++ 3.1 работа с файлами

с с++ давно не сталкивался.. написал программу. уже несколько часов бьюсь не могу понять почему когда я ввел одну запись в файл он при печати ее выводит 2 раза, а при добавлениях разных вообще не понятно что получается. текст программы -


#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
#include <complex.h>
typedef
struct
{
char fio[50];
int cl;
char tel[15];
int a[4];
}skolnik;

dobavit()
{
FILE *f;
skolnik s;
int d=1;
if ((f=fopen("f.dat","ab"))==NULL) exit(1);
while (d!=0)
{
puts("fio " );
gets(s.fio);
puts("class " );
cin >>s.cl;
puts("tel " );
gets(s.tel);
puts("math " );
cin >>s.a[0];
puts("fiz " );
cin >>s.a[1];
puts("rus " );
cin >>s.a[2];
puts("kbn " );
cin >>s.a[3];
fwrite(&s, sizeof(skolnik), 1, f);
puts(" vvodit dalshe? 1-yes, 0-no");
cin >>d;
}
fclose(f);
return 1;
}

dobavitvnachalo()
{
FILE *f;
skolnik s;
int i, r;

skolnik a[20];
i=0;
if ((f=fopen("f.dat","rb"))==NULL) exit(1);
while (!feof(f))
{
fread(&a[i], sizeof(skolnik), 1, f);
i++;
}
fclose(f);

if ((f=fopen("f.dat","wb"))==NULL) exit(1);
puts("fio " );
gets(s.fio);
puts("class " );
cin >>s.cl;
puts("tel " );
gets(s.tel);
puts("math " );
cin >>s.a[0];
puts("fiz " );
cin >>s.a[1];
puts("rus " );
cin >>s.a[2];
puts("kbn " );
cin >>s.a[3];
fwrite(&s, sizeof(skolnik), 1, f);

r = i;
i=0;
for (i=0; i<r; i++)
fwrite(&a[i], sizeof(skolnik), 1, f);

fclose(f);
return 1;
}

pechat()
{
FILE *f;
skolnik s;
if ((f=fopen("f.dat","rb"))==NULL) exit(1);
while (!feof(f))
{
fread(&s, sizeof(skolnik), 1, f);
cout <<s.fio <<"\n";
cout <<s.cl <<"\n";
cout <<s.tel <<"\n";
cout <<s.a[0] <<" " <<s.a[1] <<" " <<s.a[2] <<" " <<s.a[3] <<" " <<"\n";
}
fclose(f);
return 1;
}

udalit()
{
FILE *f;
skolnik s;
int i, r;

skolnik a[20];
i=0;
if ((f=fopen("f.dat","rb"))==NULL) exit(1);
while (!feof(f))
{
fread(&a[i], sizeof(skolnik), 1, f);
i++;
}
fclose(f);

if ((f=fopen("f.dat","wb"))==NULL) exit(1);


r = i;
for (i=0; i<r; i++)
if ((a[i].a[0]!=2)&&(a[i].a[1]!=2)&&(a[i].a[2]!=2)&&(a[i].a[3]!=2))
fwrite(&a[i], sizeof(skolnik), 1, f);

fclose(f);
return 1;
}


main(void)
{
int d;
d=10;
while (d!=5)
{
cout<<"\nvvedite deistvie 1-dobavit, 2-dobavit v nachalo, 3-pechat, 4-udalit, 5-exit\n";
cin >>d;
if (d==1) dobavit();
if (d==2) dobavitvnachalo();
if (d==3) pechat();
if (d==4) udalit();

}

clrscr;
return 1;
}
Infa-Red вне форума Ответить с цитированием
Старый 10.05.2010, 22:28   #2
Infa-Red
Новичок
Джуниор
 
Регистрация: 10.05.2010
Сообщений: 3
По умолчанию

Или ньанс тут или хз что.. не пойму вообщем.
Infa-Red вне форума Ответить с цитированием
Старый 10.05.2010, 22:37   #3
Infa-Red
Новичок
Джуниор
 
Регистрация: 10.05.2010
Сообщений: 3
По умолчанию

убираю ненужный текст программы -


#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
#include <complex.h>
typedef
struct
{
char fio[50];
int cl;
char tel[15];
int a[4];
}skolnik;

dobavit()
{
FILE *f;
skolnik s;
int d=1;
if ((f=fopen("f.dat","ab"))==NULL) exit(1);
while (d!=0)
{
puts("fio " );
gets(s.fio);
puts("class " );
cin >>s.cl;
puts("tel " );
gets(s.tel);
puts("math " );
cin >>s.a[0];
puts("fiz " );
cin >>s.a[1];
puts("rus " );
cin >>s.a[2];
puts("kbn " );
cin >>s.a[3];
fwrite(&s, sizeof(skolnik), 1, f);
puts(" vvodit dalshe? 1-yes, 0-no");
cin >>d;
}
fclose(f);
return 1;
}



pechat()
{
FILE *f;
skolnik s;
if ((f=fopen("f.dat","rb"))==NULL) exit(1);
while (!feof(f))
{
fread(&s, sizeof(skolnik), 1, f);
cout <<s.fio <<"\n";
cout <<s.cl <<"\n";
cout <<s.tel <<"\n";
cout <<s.a[0] <<" " <<s.a[1] <<" " <<s.a[2] <<" " <<s.a[3] <<" " <<"\n";
}
fclose(f);
return 1;
}




main(void)
{
int d;
d=10;
while (d!=5)
{
cout<<"\nvvedite deistvie 1-dobavit, 2-dobavit v nachalo, 3-pechat, 4-udalit, 5-exit\n";
cin >>d;
if (d==1) dobavit();
if (d==3) pechat();

}

clrscr;
return 1;
}

программа может добавлять запись в файл и печатать содержимое файла. только криво все... почему?
Infa-Red вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа со StringGrid(borland C++ builder) Greenoren Помощь студентам 4 20.11.2009 22:57
Работа с классом TStringStream в Borland C++ profi Общие вопросы C/C++ 2 26.07.2009 20:14
Строки и работа с файлами на Borland C++ 3.1 CePryH Помощь студентам 6 16.06.2009 16:37
Работа со строками в Borland C++ SL1M_DOGG Помощь студентам 1 08.06.2009 15:36
Организация циклов и работа с одномерными массивами в Borland C++ 3.1 Xeon332 Помощь студентам 8 25.12.2008 16:55