Ответить на сообщение
Вернуться к теме
Вы отвечаете на сообщение:
Автор: nfyaka (04.05.2010 в 20:02) Программа выводит строчки правильно в 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; }
Ваше имя:
Пароль:
Цитировать Используйте тэги для выделения текста: Код: [code][/code] Жирный: [b][/b] Наклонный: [i][/i] URL: [url][/url]
Сообщение:
Прикрепить: