Форум: Форум C++Разное
Новые темы: 00
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Dev C++ Turbo c++
 
 автор: nfyaka   (04.05.2010 в 20:02)   письмо автору
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.

  Ответить  
 
 автор: vvmcpp   (20.12.2010 в 10:50)   письмо автору
 
   для: nfyaka   (04.05.2010 в 20:02)
 

Скорее всего в Turbo C++ у тебя подключены не те библиотеки которые подключены в Dev,
хотя они и называются одинаково.
Из-за этого может быть ошибка.
Скорее всего для того чтобы однозначно правильно работало надо указать полный путь к библиотекам или явно сказать компилятору откуда что берется и наверное использовать
namespace

Подключение по новому стилю
#include <iostream>
подключение по устаревшему стилю
#include <iostream.h>
подключение нестандартных
#include "имя_библиотеки" или #include "имя_библиотеки.h" - точно не знаю вернее это может зависит от компилятора который используется
По идее хороший компилятор должен выдать ошибку если директива написанна неправильно

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования