Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 3 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 19.10.2004
Откуда: Киев
Возникла ошибка не пойму в чем дело все вроде правильно.
Кто знает в почему ошибка просьба помочь
(Builder C++ 5)
************** *.Н **********************

class CompileClass_LW1
{
public: //------------------------
CompileClass_LW1(void);
int Calculate(void);
int Read_File(void);
int Calc_digits(const char *t_bp_p,bool marker_float, int &dec, int &sign);

private: //----------------------

protected://----------------------
unsigned int num_mas;
struct About_pasport
{
int N;
int N_inp;
int N_out;
int N_f;
double f_min;
double f_max;
}About_pasport_var;
struct About_comp
{
char Type_comp[10];
unsigned int Junction_points[3][1];
float Parametr;
char Full_Name_comp[50];
} ;

};

//*********** *.СРР *****************
int CompileClass_LW1::Calculate(void)
{
extern AnsiString Name;
char calc_buff[1500]={'\0'};
FILE *fp0=0;
fp0=fopen(Name.c_str(), "a+") ;
Form1->StatusBar1->Panels->Items[0]->Width=200;
Form1->StatusBar1->Panels->Items[0]->Text="Ïðîöåñû: Ïîäñ÷åò êîë-âà ýëåìåíòîâ â ìàñèâå ñòðóêòóðû....";
if(Name == "")
{
MessageDlg("&Ocirc;&agrave;&eacute;&euml; &iacute;&aring; &icirc;&ograve;&ecirc;&eth;&ucirc;&ograve;.",mtWarning,TMsgDlgButtons()< <mbOK,0);
}
if (Name != "")
{
while( fgets(calc_buff, sizeof(calc_buff),fp0) != NULL )
{
//-----------Calculate----------------------------------------------
for(register unsigned short int i=0; i < strlen(calc_buff); i++)
{
if( calc_buff[i] == '\n' )
num_mas++;
}
} // while........
}// if ().....
fclose(fp0);
//Beep();
Form1->StatusBar1->Panels->Items[0]->Text="&Iuml;&eth;&icirc;&ouml;&aring;&ntilde;&ucirc;: &Iuml;&icirc;&auml;&ntilde;&divide;&aring;&ograve; &ecirc;&icirc;&euml;-&acirc;&agrave; &yacute;&euml;&aring;&igrave;&aring;&iacute;&ograve;&icirc;&acirc; &Ccedil;&Agrave;&Acirc;&Aring;&ETH;&Oslash;&Aring;&Iacute;";
return num_mas;
}

//------------------------------------------------
int CompileClass_LW1::Calc_digits(const char *t_bp_p, bool marker_float,int &dec_s, int &sign_s)
{
register unsigned short int k=0 ;
if( marker_float == 0 )
{
char temp_str_i[20] ;
itoa( atoi( t_bp_p ) , temp_str_i, 10 ) ;
k = strlen( temp_str_i ) ;
}
if( marker_float == 1)
{
char temp_str_f[20] ;

temp_str_f = fcvt( atof( t_bp_p ), 2, &dec_s, &sign_s ) ;

Вот здесь выдало ошибку [C++ Error] File1.cpp(75): E2277 Lvalue required
k = strlen( temp_str_f ) ;
}
return k;
}
//------------------------------------------------
int CompileClass_LW1::Read_File(void)
{
Form1->RichEdit1->Lines->Clear();
num_mas = Calculate() - 5;
extern AnsiString Name;
extern FILE *fp1;

char temp_buff[1500]={'\0'};
const char *t_bp=0;
Form1->StatusBar1->Panels->Items[0]->Width=300;
Form1->StatusBar1->Panels->Items[0]->Text="&Iuml;&eth;&icirc;&ouml;&aring;&ntilde;&ucirc;: &Iacute;&agrave;&divide;&agrave;&euml;&icirc; &ntilde;&ecirc;&agrave;&iacute;&egrave;&eth;&icirc;&acirc;&agrave;&iacut e;&egrave;&yuml; &ocirc;&agrave;&eacute;&euml;&agrave;....";
unsigned int n_lines = 0;

fp1=fopen(Name.c_str(), "a+") ;
t_bp=temp_buff;

Form1->RichEdit1->Paragraph->Numbering = nsBullet;
if(Name == "")
{
MessageDlg("&Ocirc;&agrave;&eacute;&euml; &iacute;&aring; &icirc;&ograve;&ecirc;&eth;&ucirc;&ograve;.", mtWarning, TMsgDlgButtons()<<mbOK,0);
}

About_comp *About_comp_var = 0;
About_comp_var=(About_comp *)calloc(num_mas,sizeof(About_comp));

// About_comp *About_comp_var = new About_comp[num_mas];
//Отменил из-за отсутсвия автом. инициализации в "0"

int cycles=0;
if (Name != "")
{
while( fgets(temp_buff, sizeof(temp_buff), fp1) != NULL )
{
if( feof (fp1) ) break;
if( temp_buff[ strlen(temp_buff)-1 ] == '\n' )temp_buff[ strlen(temp_buff)-1 ]='\0' ;
Form1->RichEdit1->Lines->Add( AnsiString(t_bp) );
//-----------Converter to lower---------------------------------------------
/* for(register unsigned short int j=0; j < sizeof(temp_buff); j++)
{
if(isalpha( t_bp[j] )!= 0)
{
temp_buff[j]=tolower(t_bp[j]);
}
}
*/
//----------------------To Struct------------------------------------------

for(unsigned short int f=0; f < strlen(temp_buff)+3; f++)
{
if( t_bp[f] == ';' || t_bp[f-1] == ';' ) cycles++;
Form1->Label1->Caption=IntToStr(cycles);
//**************************About_pasport_var************************** ***
if( cycles < 5) // N, N_inp, N_out, N_f, f_min, f_max -- &ccedil;&agrave;&iacute;&aring;&ntilde;&ograve;&egrave; &acirc; &ntilde;&ograve;&eth;&oacute;&ecirc;&ograve;&oacute;&eth;&oacute;
{
if( t_bp[f] == 'N' && t_bp[f+1] == '=' )// && isdigit( t_bp[f+2] )==0
{
Beep();
About_pasport_var.N = atoi( &t_bp[f+2]) ;
f = f + 1 + Calc_digits( &t_bp[f+2], NULL, 0,0 );
continue;
}

if( t_bp[f] == 'N' && t_bp[f+1] == '_' && t_bp[f+2]=='i' && t_bp[f+3]=='n' && t_bp[f+4]=='p' && t_bp[f+5] == '=' ) //&& isdigit( t_bp[f+6] )==1
{
About_pasport_var.N_inp = atoi( &t_bp[f+6]);
f = f + 5 + Calc_digits( &t_bp[f+6], NULL,0,0 );
continue;
}

if( t_bp[f] == 'N' && t_bp[f+1] == '_' && t_bp[f+2]=='o' && t_bp[f+3]=='u' && t_bp[f+4]=='t' && t_bp[f+5] == '=' ) // && isdigit( t_bp[f+6])==1
{
About_pasport_var.N_out = atoi( &t_bp[f+6] );
f = f + 5 + Calc_digits( &t_bp[f+6], NULL,0,0 );
continue;
}

if( t_bp[f] == 'N' && t_bp[f+1] == '_' && t_bp[f+2] == 'f' && t_bp[f+3] == '=' ) // && isdigit( t_bp[f+4] )== 1
{
About_pasport_var.N_f = atoi( &t_bp[f+4]) ;
f = f + 3 + Calc_digits( &t_bp[f+4], NULL,0,0 );
continue;
}
if( t_bp[f] == 'f' && t_bp[f+1] == '_' && t_bp[f+2]=='m' && t_bp[f+3]=='i' && t_bp[f+4]=='n' && t_bp[f+5] == '=' ) // && isdigit( t_bp[f+6] )==1
{
int dec=0;
int sign=0;
About_pasport_var.f_min = atof( &t_bp[f+6]);
f = f + 5 + Calc_digits( &t_bp[f+6], 1,dec, sign );
Form1->Label2->Caption=IntToStr(Calc_digits( &t_bp[f+6], 1, dec, sign ));
Form1->RichEdit1->Lines->Add( IntToStr(dec) );
Form1->RichEdit1->Lines->Add( IntToStr(sign) );

continue;
}

if( t_bp[f] == 'f' && t_bp[f+1] == '_' && t_bp[f+2]=='m' && t_bp[f+3]=='a' && t_bp[f+4]=='x' && t_bp[f+5] == '=' )// && isdigit( t_bp[f+6] )==1
{
int dec;
int sign;
About_pasport_var.f_max = atof( &t_bp[f+6]);
f = f + 5 + Calc_digits( &t_bp[f+6], 1, dec, sign );
continue;
}
} // if...


и т.д (продолжение большое потому не приводил)

Описание функции вот:
*************************************
Header File

stdlib.h

Category

Conversion Routines, Math Routines

Syntax

#include <stdlib.h>
char *fcvt(double value, int ndig, int *dec, int *sign);

Description

Converts a floating-point number to a string.

fcvt converts value to a null-terminated string digit starting with the leftmost significant digit with ndig digits to the right of the decimal point. fcvt then returns a pointer to the string. The position of the decimal point relative to the beginning of the string is stored indirectly through dec (a negative value for dec means to the left of the returned digits). There is no decimal point in the string itself. If the sign of value is negative the word pointed to by sign is nonzero; otherwise it is 0.

The correct digit has been rounded for the number of digits to the right of the decimal point specified by ndig.

Return Value

The return value of fcvt points to static data whose content is overwritten by each call to fcvt and ecvt.

********************************************

Текст сообщений (в коде) был поврежден при копировании, и информации полезной не несет потому я не выправлял.

Заранее благодарен.

_________________
Многие вещи нам непонятны не потому, что понятия наши слабы; но потому, что сии вещи не входят в круг наших понятий. :-)



Партнер
 

Advanced member
Статус: Не в сети
Регистрация: 30.08.2003
Откуда: Санкт-Петербург
Цитата:
temp_str_f

это константный указатель (имя массива = указателю на его первый элемент)

Добавлено спустя 2 минуты, 39 секунд:
точнее: его нельзя изменить :)
надо написать примерно так:
char* mem;
mem = fcvt (какие-то параметры);
а теперь
k=strlen(mem);

Добавлено спустя 2 минуты, 47 секунд:
Цитата:
Return Value

The return value of fcvt points to static data whose content is overwritten by each call to fcvt and ecvt.

_________________
{:€ дед в законе :-) нородный окодемег
почетный пользователь OpenSuSE 11.3
Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad


 

Member
Статус: Не в сети
Регистрация: 19.10.2004
Откуда: Киев
Root благодарю вас.
Помогли советы, я просто привык что сначала необходимо выделить место а потом уже на него указатель а потом уже что то туда записывать.
А тут, насколько я понял, место уже выделено функцией при возврате значения.

Другими словами я как бы пытался имени (адресу) одного массива приравнять адрес (имя) другого, а они статические тоесть это и есть области памяти.

В любом случае спасибо, а то вот никак не мог понять в чем дело.
Как говорил Энгельс: "традиция - великая сила", вот тут она меня и подвела 8-)

_________________
Многие вещи нам непонятны не потому, что понятия наши слабы; но потому, что сии вещи не входят в круг наших понятий. :-)


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 3 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan