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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2013, 16:25   #1
EllSH
Новичок
Джуниор
 
Регистрация: 12.04.2013
Сообщений: 1
По умолчанию Чтение файла

Помогите пожалуйста, ошиблась или в функции чтения файла или при вызове.Буду очень благодарна за помощь.

Код:

struct Auto
{
public:
        char *mark;
        int power;
        float cost;
        Auto(char *m,int p,float c);
        Auto()
                {mark="";
                 cost=0;
                 power=0;}
};

class Data
{
public:
        Auto str;
        Data *prev,*next;
        Data()
        {
        prev=NULL;
        next=NULL;
        }
        Data(Auto &inf);
};

class List:public Data
{
public:
        Data *Begin,*End;
        int num_el;
        List()
        {Begin=NULL;
         End=NULL;
         num_el=0;}
        ~List();
        void Add_el(Auto &a);
        void Print_SG(TStringGrid *sg);
        int Get_num(){return num_el;}
        
        
        void Write_File(char*fn);
        void Read_File(char*fn);
};
//Различные функции и конструкторы
Auto::Auto(char *m,int p,float c)
{
int nl;
nl=strlen(m);
mark=new char[nl+1];
strcpy(mark,m);
mark[nl]='\0';
power=p;
cost=c;
}

Data::Data(Auto &inf)
{
str.mark=inf.mark;
str.power=inf.power;
str.cost=inf.cost;
prev=NULL;
next=NULL;
}

List::~List()
{
Data *s,*t;
s=Begin;
while(s)
        {
        t=s;
        s=s->next;
        delete t;
        }
num_el=0;
}
void List::Add_el(Auto &a)
{
Data *d;
d=new Data(a);
if(Begin==NULL)
        {
        Begin=d;
        End=d;
        }
else
        {
        End->next=d;
        d->prev=End;
        End=d;
        }
num_el++;
}

void List::Print_SG(TStringGrid *sg)
{
Data *d;
sg->RowCount=2;
int j=1;
d=Begin;
if (num_el==0)
        {
        sg->Cells[0][j]="";
        sg->Cells[1][j]="";
        sg->Cells[2][j]="";
        sg->Cells[3][1]=IntToStr(Get_num());
        }
else
{while(d!=NULL)
        {
        sg->RowCount=j+1;
        sg->Cells[0][j]=AnsiString(d->str.mark);
        sg->Cells[1][j]=IntToStr(d->str.power);
        sg->Cells[2][j]=FloatToStr(d->str.cost);
        sg->Cells[3][1]=IntToStr(Get_num());
        j++;
        d=d->next;
        }}
}


void List::Write_File(char*fn)
{Data *s;
 FILE *F1;

  if ((F1 = fopen("test.txt", "wb")) == NULL)
      exit(1);
  fseek(F1, SEEK_SET, 0);
  fwrite(&num_el,sizeof(int),1,F1);
  s=Begin;

  while(s)
  {
    fwrite(&s->str, sizeof(s->str), 1, F1);
    s=s->next;
  }
  fclose(F1);	}
void List::Read_File(char*fn)

{
  FILE *F1;
  Auto s;
  int i=0,n;
  F1=fopen("test.txt","rb+");
  fseek(F1, SEEK_SET, 0);
  fread(&n,sizeof(int),1,F1);
  while(i<n)
  {
    fread(&s,sizeof(s),1,F1);
    Add_el(s);
    i++;
  }
  fclose(F1);
}

// Глобальная переменная
List ls;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
sg1->ColCount=4;
sg2->ColCount=4;
Form1->sg1->Cells[0][0]="Марка";
Form1->sg1->Cells[1][0]="Мощность";
Form1->sg1->Cells[2][0]="Цена";
Form1->sg1->Cells[3][0]="Кол-во элементов";
Form1->sg2->Cells[0][0]="Марка";
Form1->sg2->Cells[1][0]="Мощность";
Form1->sg2->Cells[2][0]="Цена";
Form1->sg2->Cells[3][0]="Кол-во элементов";
long Style=GetWindowLong(bFind_Delete->Handle,GWL_STYLE);
SetWindowLong(bFind_Delete->Handle,GWL_STYLE,Style | BS_MULTILINE);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::bAddClick(TObject *Sender)
{
int p=ePower->Text.ToInt();
float c=eCost->Text.ToDouble();
Auto l(eMark->Text.Trim().c_str(),p,c);
ls.Add_el(l);
ls.Print_SG(sg1);
}
//-------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{  ls.Write_File("test.dat");
    for(int i = 0; i < sg1->ColCount; i++)
    for(int j = 1; j < sg1->RowCount; j++)
    sg1->Cells[i][j] = "";
  ls.~List();

}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button2Click(TObject *Sender)
{    FILE *F1;
  Auto str;
  F1=fopen("test.dat","rb+");
  fseek(F1, SEEK_SET, 0);
  fread(&str,sizeof(str),1,F1);
  fclose(F1);
  sg1->Cells[0][1]=AnsiString(str.mark);
  sg1->Cells[1][1]=IntToStr(str.power);
  sg1->Cells[2][1]=FloatToStr(str.cost);

}

Последний раз редактировалось Stilet; 12.04.2013 в 17:06.
EllSH вне форума Ответить с цитированием
Старый 12.04.2013, 17:11   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

0) Код на форуме оформляется тегом CODE, а не QUOTE.

1) sizeof(s->str), скорее всего, равно 12. Auto::mark - указатель, одно число. Сохранение указателя в файл - бессмысленное действие.

2) Два комментария на всю эту простыню - маловато.

3) Для дальнейших советов желательна хоть какая-нибудь диагностическая информация.
Abstraction вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение из файла unbanned Паскаль, Turbo Pascal, PascalABC.NET 0 01.03.2012 12:58
Чтение файла PastoriXx C++ Builder 8 23.02.2012 08:13
Чтение из файла clasterit Паскаль, Turbo Pascal, PascalABC.NET 6 04.11.2011 17:46
Чтение из файла trance-boy Общие вопросы C/C++ 3 09.11.2010 23:22
Чтение из файла Need_Help Паскаль, Turbo Pascal, PascalABC.NET 5 19.05.2007 05:37