|
3 Кб |
|
| Программа выводит строчки правильно в Dev-C++ и совершенно не то в Turbo C++. Мне необходимо, чтобы оно работало в Turbo C++. Пожалуйста, подскажите.
В классе CDВ есть метод Get(int position), который считывает с файла за адресом dbname с позиции position структуру, и возвращает ее. В классе CUser есть три указателя на объекты класса CDB, каждый отвечает за работу с разными файлами. Из ShowRec(int position) идет обращение к Get(int position) каждого указателя и выводится на экран содержимое полученной структуры.
В Dev-C++ выводит правильно, а в Turbo C++ совершенно не то. Я совершенно не могу понять в чем проблема.
#include <stdio.h>
#include <string.h>
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
//----------------------
typedef struct
{
char field[7][100];
}record;
class CDB
{ char*dbname;
int numrecs;
public:
CDB(char*name);
~CDB();
record Get(int position);
};
CDB::~CDB()
{
delete []dbname;
dbname=NULL;
}
CDB::CDB(char*name)
{
numrecs=0;
dbname=new char[strlen(name)];
strcpy(dbname,name);
FILE*f;
f=fopen(dbname,"rb");
if(!f)
{ f=fopen(dbname,"wb");
record rec;
memset(&rec,0,sizeof(record));
}
else
{
fseek(f,0,SEEK_END);
numrecs=ftell(f)/sizeof(record);
}
fclose(f);
}
record CDB::Get(int position)
{ record rec;
FILE*f=fopen(dbname,"rb");
fseek(f,position*sizeof(record),SEEK_SET);
fread(&rec,sizeof(record),1,f);
fclose(f);
return rec;
}
//-----------------
class CUser
{
protected:
CDB*dbP;
CDB*dbC;
CDB*dbS;
public:
CUser(CDB*dbp,CDB*dbc,CDB*dbs);
void ShowRec(int position);
};
CUser::CUser(CDB*dbp,CDB*dbc,CDB*dbs)
{
dbP=dbp;
dbC=dbc;
dbS=dbs;
}
void CUser::ShowRec(int position)
{
record current=dbP->Get(position);
for(int i=0;i<7;i++)
cout<<current.field[i]<<endl;
cout<<"---"<<endl;
current=dbC->Get(position);
for(int j=0;j<7;j++)
cout<<current.field[j]<<endl;
cout<<"---"<<endl;
current=dbS->Get(position);
for(int k=0;k<7;k++)
cout<<current.field[k]<<endl;
cout<<"---"<<endl;
}
int main()
{
CDB dbPassw("DBPASSW.dat"),dbCounter("DBCOUNTER.dat"),dbConsum("DBCONSUM.dat");
CUser obU(&dbPassw,&dbCounter,&dbConsum);
obU.ShowRec(0);
getch();
return 0;
} |
файлы: DBPASSW.dat - 3 структуры, остальные по 6. | |
|
|
|
|
|
|
|
для: nfyaka
(04.05.2010 в 20:02)
| | Скорее всего в Turbo C++ у тебя подключены не те библиотеки которые подключены в Dev,
хотя они и называются одинаково.
Из-за этого может быть ошибка.
Скорее всего для того чтобы однозначно правильно работало надо указать полный путь к библиотекам или явно сказать компилятору откуда что берется и наверное использовать
namespace
Подключение по новому стилю
#include <iostream>
подключение по устаревшему стилю
#include <iostream.h>
подключение нестандартных
#include "имя_библиотеки" или #include "имя_библиотеки.h" - точно не знаю вернее это может зависит от компилятора который используется
По идее хороший компилятор должен выдать ошибку если директива написанна неправильно | |
|
|
|