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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2011, 00:06   #1
Явгений
Новичок
Джуниор
 
Регистрация: 28.02.2011
Сообщений: 4
По умолчанию Проблема сохранности строки между функциями класса

Всем привет. Делаю задание и возникла проблема, аж сил нет. Не могу никак найти ошибку. Не сохраняет введенное значение, просто при запросе имени файла выдает случайный набор букв. И ничего не могу поделать

ссылка на прогу: http://www.failoobmenik.ru/6cas5ongpu2k.html

Посмотрите плз. А то у меня уже мозги вытекают
Явгений вне форума Ответить с цитированием
Старый 01.03.2011, 02:26   #2
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Выложите, пожалуйста, код сюда.
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 01.03.2011, 08:53   #3
Явгений
Новичок
Джуниор
 
Регистрация: 28.02.2011
Сообщений: 4
По умолчанию

Код:
//#include "stdafx.h"
/*
общий обьъем памяти на диске360кб.Файлы имеют произвольную длину от 18 байт до 32кб .
в процессе работы файлы либо записываются на диск,либо удаляются с него.
В начале работы файлы записываются подряд друг за другом.после удаления файла на диске образуется свободный участок памяти и
 вновь записываемый файл либо размещается на свободном участке,либо если файл не помещ в свободный участок,
размещается после последней запис файла.В случае когда файл превосходит длину самого большого свободного участка,
выдает аварийное сообщение.требование на запись или удаление файла задается в командной строке,которая содержит имя файла,
его длину в байтах,признак записи или удаление.
Программа должна выдавать по запросу сведения о занятых и свободных участках памяти на диске.
*/
#include "stdio.h"
#include "stdlib.h"
#include <iostream>
#include <conio.h>
#include <time.h>

using namespace std;
//#define n=10


struct file
{int lenght,svobodno;
char *s;
file* next,*prev;
};

class Cpamyat
{private:long int svobodno, max,max_svobodno;int proydeno;file *tec,*nnew,*start;
public: Cpamyat(void);
void dobavlenie(void);
void udalenie(void);
void info(void);
file* perehod (char*);
file* perehod (long int);
int perehod1 (char*);
};

Cpamyat::Cpamyat(void)
{char a[1];float q;int g;
max=max_svobodno=368640;
proydeno=0;
start=tec=new file;
tec->prev=NULL;
tec->next=NULL;
tec->lenght=368640;
tec->svobodno=1;
tec->s=new char[10];
/*for(int i=0;i<10;i++)
        {tec->s[i]='0';
        }*/
while(1)
        {cout<<"_______________________________\n1-dobavit fail\n2-pokazat svedeniya o pamyati\n";
        if(max_svobodno!=max) cout<<"3-udalit fail\n";
        cout<<"9-zavershit rabotu\n";
        cin>>a;
        q=atof(a);
        g=int(q);
        if ((q-g)!=0||q<1) cout <<"vvedennoe chislo ne yavlyaetsya naturalnym chislom. Povtorite vvod.\n";
        switch(g)
                 {case 1: {if(max_svobodno>=18) dobavlenie();else cout<<"dlya dobavleniya neobhodimo osvobodit pamyat\n"; continue;}
                 case 2: {info();continue;}
                 case 3: {if(max_svobodno!=max) udalenie(); continue;}
                 case 9: {cout<<"rabota zavershena\n"; _getch();exit(0);continue;}
                 default: {continue;}
                 }   
        }        
}

void Cpamyat::dobavlenie(void)
{int a,t,v,i;char l[10];float q;
cout<<max_svobodno<<"\n";
if(max_svobodno<32768)
    {cout<<"svobodno: "<<max_svobodno<<" hvatit na dobavlenie? (0-da, 1-net)\n";
    cin>>a;
    if (a==1) udalenie();
    }
for(int i=0;i<10;i++)
        {l[i]=0;
        }
cout<<"Vvedite imya (<10 bukv)\n";
cin>>l;
cout<<"i razmer (ot 18 do 32768)\n";
while(1)
        {cin>>q;
         if ((q-int(q))!=0||q<1) cout <<"vvedennoe chislo ne yavlyaetsya naturalnym chislom. Povtorite vvod.\n";
         else if (q<18) cout<<"razmer dolzhen byt bolshe 18\n";
         else if (q>32768||q>max_svobodno) cout<<"Razmer slishkom velik\n";
         else {v=int(q);tec=perehod(v); break;}
        }
if(tec->lenght>v+17)
      {nnew=new file;
      nnew->prev=tec;
      if(tec->next!=NULL)  nnew->next=tec->next; nnew->next=NULL; 
      tec->next=nnew;
      nnew->prev=tec;
      nnew->lenght=tec->lenght-v;
      nnew->svobodno=1;
      }
tec->lenght=v;
tec->s=l;
if(tec->prev==NULL) start=tec;
tec->svobodno=0;
tec=start;
max_svobodno=0;
while(1)
        {if((tec->lenght>max_svobodno)&&(tec->svobodno==1)) max_svobodno=tec->lenght;//cout<<"max_svobodno="<<max_svobodno<<"\n";
        if(tec->next==NULL) break; else tec=tec->next;
        }
cout<<start->s<<"\n";
cout<<max_svobodno<<"\n";
}

file *Cpamyat::perehod(long int v)
{tec=start;
while(1)
        {if (tec->lenght>v&&tec->svobodno==1) return tec;
         else tec=tec->next;
        }
}

int Cpamyat::perehod1(char *j)
{tec=start;
while(1)
        {if(tec->s==j) return 1;
        else { if(tec->next!=NULL) tec=tec->next;
             else return 0;
             }
        }
}

file *Cpamyat::perehod(char *j)
{tec=start;
while(1)
        {if(tec->s==j) return tec;
        }
}

Последний раз редактировалось ACE Valery; 02.03.2011 в 09:46.
Явгений вне форума Ответить с цитированием
Старый 01.03.2011, 08:54   #4
Явгений
Новичок
Джуниор
 
Регистрация: 28.02.2011
Сообщений: 4
По умолчанию

Код:
//koncovka
void Cpamyat::udalenie(void)
{char *j;int f;
j=new char[10];
cout<<start->s<<"\n";
tec=start;
cout<<"start="<<tec->s<<"\n";
while(1)
        {if(tec->svobodno==0) cout<<tec->s<<"\n";
        if(tec->next==NULL) break; else tec=tec->next;
        }
cout<<"vvedite imya uzla, kotoryi hotite udalit\n";
cin>>j;
f=perehod1(j);
if(f==0) {cout<<"uzla s imenem "<<j<<" ne suschestvuet\n"; return;}
else tec=perehod(j);
if(tec->prev->svobodno==1||tec->next->svobodno==1)
  {if(tec->prev!=NULL&&tec->prev->svobodno==1) 
       {nnew=tec->prev;
       nnew->lenght+=tec->lenght;
       if(tec->next==NULL) nnew->next=NULL; else nnew->next=tec->next;
       delete(tec);
       }
  if(tec->next!=NULL&&tec->next->svobodno==1) 
       {nnew=tec->next;
       nnew->lenght+=tec->lenght;
       if(tec->prev==NULL) nnew->prev=NULL; else nnew->prev=tec->prev;
       }
  }
else tec->svobodno=1;
}

void Cpamyat::info(void)
{long int t,i;
t=0;
tec=start;
cout<<start->s<<"\n";
if (tec->prev==NULL&&tec->next==NULL) cout<<"svobodno "<<tec->lenght<<" bait\n";
else
{cout<<"est faili:\n";
while(1)
        {if(tec->svobodno==1) t+=tec->lenght; 
        else  cout<<tec->s<<"   "<<tec->lenght<<"\n";
        if(tec->next!=NULL) tec=tec->next; else break;
        }
cout<<"Svobodno "<<t<<" bait\n";        
}
};

int main(void)
{Cpamyat f;
}

Последний раз редактировалось ACE Valery; 02.03.2011 в 09:46.
Явгений вне форума Ответить с цитированием
Старый 01.03.2011, 08:55   #5
Явгений
Новичок
Джуниор
 
Регистрация: 28.02.2011
Сообщений: 4
По умолчанию

Программа большая, но проблема возникла лишь с неверностью сохранения строки в структуре file. И да, там не смайлики стоят в коде..
Явгений вне форума Ответить с цитированием
Старый 02.03.2011, 09:48   #6
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Чтобы смайликов не было, нужно свой код оформлять с помощью кнопки # на панели ввода сообщения либо же с помощью тега [code]
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема в Delphi 2010 с функциями работы со строками Likos Общие вопросы Delphi 7 21.12.2010 19:42
Проблема с виртульными функциями petrovich985 Общие вопросы C/C++ 7 18.12.2010 20:39
Проблема с функциями из math.h maryan.vetrov Общие вопросы C/C++ 2 01.08.2010 19:34
Разница между программным создание класса и интерфейсным. TwiX Общие вопросы Delphi 3 06.10.2009 09:58
проблема с функциями world12_tk Помощь студентам 6 03.03.2009 19:34