создание калькулятора! отработка нажатия ентер
проблема в следующем! если в нормальном калькуляторе ввести с клавы первое значение 10 потом нажать минус 1 а потом ентер то с каждым нажатием ентера результирующее значение уменьшается на 1! А у меня ток один раз а потом либо 0 либо результирующее значение
привожу код:
размещение класса
ClassCalc.H
#ifndef ClassCalkH
#define ClassCalkH
//---------------------------------------------------------------------------
class TCalcPressKey
{
public:
char SIMVOL;
float PERVOE_ZNACHENIE,VTOROE_ZNACHENIE,TOTAL,TEMP_BUUF;
int COUNT_PRESS_BUTTON_NUMBER, COUNT_PRESS_SIMVOL_NUMBER;
CalcPressKey();
float KALKULATOR(char SIMVOL, float PERVOE_ZNACHENIE,float VTOROE_ZNACHENIE,float TOTAL,float TEMP_BUUF);
};
//---------------------------------------------------------------------------
#endif
размещение методов
ClassCalc.cpp
#pragma hdrstop
#include "ClassCalk.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
float TCalcPressKey::KALKULATOR(char SIMVOL, float PERVOE_ZNACHENIE,
float VTOROE_ZNACHENIE,float TOTAL,float TEMP_BUUF)
{
TEMP_BUUF = PERVOE_ZNACHENIE;
switch(SIMVOL)
{
case '-':TOTAL = PERVOE_ZNACHENIE - VTOROE_ZNACHENIE; break; // Minus
case '+':TOTAL = PERVOE_ZNACHENIE + VTOROE_ZNACHENIE; break;
case '*':TOTAL = PERVOE_ZNACHENIE * VTOROE_ZNACHENIE; break;
case '/':TOTAL = PERVOE_ZNACHENIE / VTOROE_ZNACHENIE; break;
}
return TOTAL;
}
TCalcPressKey::CalcPressKey()
{
PERVOE_ZNACHENIE = 0;
VTOROE_ZNACHENIE = 0;
TOTAL = 0;
COUNT_PRESS_BUTTON_NUMBER = 0;
COUNT_PRESS_SIMVOL_NUMBER = 0;
SIMVOL = ' ';
}
заголовочный файл главной формы
//---------------------------------------------------------------------------
#ifndef CalcUnitH
#define CalcUnitH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <XPMan.hpp>
#include "ClassCalk.h"
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TEdit *Edit1;
TButton *BT0;
TButton *BTPoint;
TButton *BTEgal;
TButton *BT1;
TButton *BT2;
TButton *BT3;
TButton *BT4;
TButton *BT5;
TButton *BT6;
TButton *BT7;
TButton *BT8;
TButton *BT9;
TButton *BTPlus;
TButton *BTDelenie;
TButton *BTMP;
TButton *BTMinus;
TButton *BTUmnuj;
TButton *BTClear;
TXPManifest *XPManifest1;
void __fastcall Edit1Change(TObject *Sender);
void __fastcall Edit1KeyPress(TObject *Sender, char &Key);
void __fastcall Edit1KeyDown(TObject *Sender, WORD &Key, TShiftState Shift);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
//=========MyClass Declaration====Start=================================
TCalcPressKey CalcPressKey();
TCalcPressKey MY_CALK;
float KALKULATOR(char SIMVOL, float PERVOE_ZNACHENIE,float VTOROE_ZNACHENIE,float TOTAL,float TEMP_BUUF);
//=========MyClass Declaration====End =================================
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
Срр файл главной формы
#include <vcl.h>
#pragma hdrstop
#include<winuser.h> SysUtils.hpp
#include "SysUtils.hpp"
#include "CalcUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
TForm1* CalcPressKey();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
MY_CALK.COUNT_PRESS_BUTTON_NUMBER=1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
//-----------------najatie ravno----------------end
if ((Key >= '0') && (Key <= '9'))
{
return ;
}
else
Key = 0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
//-----------------Najatie +,-,*,/, ----------------Start
if(Key == 189)
{
MY_CALK.COUNT_PRESS_BUTTON_NUMBER = 2;
MY_CALK.SIMVOL = '-';
MY_CALK.PERVOE_ZNACHENIE = StrToFloat(Edit1->Text);
Edit1->Text=' ';
}
//-------------------------------------------------
if(Key == 187)
{
MY_CALK.COUNT_PRESS_BUTTON_NUMBER = 2;
MY_CALK.SIMVOL = '+';
MY_CALK.PERVOE_ZNACHENIE = StrToFloat(Edit1->Text);
Edit1->Text=' ';
}
//-------------------------------------------------
if(Key == 191)
{
MY_CALK.COUNT_PRESS_BUTTON_NUMBER = 2;
MY_CALK.SIMVOL = '/';
MY_CALK.PERVOE_ZNACHENIE = StrToFloat(Edit1->Text);
Edit1->Text=' ';
}
//-------------------------------------------------
if(Key == 56)
{
MY_CALK.COUNT_PRESS_BUTTON_NUMBER = 2;
MY_CALK.SIMVOL = '*';
MY_CALK.PERVOE_ZNACHENIE = StrToFloat(Edit1->Text);
Edit1->Text=' ';
}
//-----------------Najatie +,-,*,/, ------------End
//<-------------------------------------------------------------------->
//-----------------najatie ravno--------------start
if(Key ==13)
{
int count=1;
if(MY_CALK.COUNT_PRESS_BUTTON_NUMBER ==1 && count==1)
{
MY_CALK.VTOROE_ZNACHENIE= StrToFloat(Edit1->Text);
MY_CALK.TEMP_BUUF = MY_CALK.VTOROE_ZNACHENIE;
MY_CALK.TOTAL=MY_CALK.KALKULATOR(MY_CALK.SIMVOL,MY_CALK.PERVOE_ZNACHENIE,MY_CALK.VTOROE_ZNACHENIE,
MY_CALK.TOTAL,MY_CALK.TEMP_BUUF);
Edit1->Text= FloatToStr(MY_CALK.TOTAL);
MY_CALK.PERVOE_ZNACHENIE = StrToFloat(Edit1->Text);
MY_CALK.VTOROE_ZNACHENIE = MY_CALK.TEMP_BUUF;
ShowMessage("Srabotal IF");
count=2;
}
if(MY_CALK.COUNT_PRESS_BUTTON_NUMBER ==1 && count==2)
{
ShowMessage("Srabotal else");
MY_CALK.VTOROE_ZNACHENIE = MY_CALK.TEMP_BUUF;
MY_CALK.TOTAL=MY_CALK.KALKULATOR(MY_CALK.SIMVOL,MY_CALK.PERVOE_ZNACHENIE,MY_CALK.VTOROE_ZNACHENIE,
MY_CALK.TOTAL,MY_CALK.TEMP_BUUF);
Edit1->Text= FloatToStr(MY_CALK.TOTAL);
MY_CALK.PERVOE_ZNACHENIE = StrToFloat(Edit1->Text);
count = 1;
}
}
}
//---------------------------------------------------------------------------
за ранее прошу не пинать! ток начал изучать классы!
мне думается трабла в нажатии на ентер! значение переменной постоянно задается из едита! как с этим боротся!
Было так:
switch(SIMVOL)
{
case '-':TOTAL = PERVOE_ZNACHENIE - VTOROE_ZNACHENIE; break; // Minus
case '+':TOTAL = PERVOE_ZNACHENIE + VTOROE_ZNACHENIE; break;
case '*':TOTAL = PERVOE_ZNACHENIE * VTOROE_ZNACHENIE; break;
case '/':TOTAL = PERVOE_ZNACHENIE / VTOROE_ZNACHENIE; break;
}
return TOTAL;
а попробуй так:
switch(SIMVOL)
{
case '-':PERVOE_ZNACHENIE = PERVOE_ZNACHENIE - VTOROE_ZNACHENIE; break; // Minus
case '+':PERVOE_ZNACHENIE = PERVOE_ZNACHENIE + VTOROE_ZNACHENIE; break;
case '*':PERVOE_ZNACHENIE = PERVOE_ZNACHENIE * VTOROE_ZNACHENIE; break;
case '/':PERVOE_ZNACHENIE = PERVOE_ZNACHENIE / VTOROE_ZNACHENIE; break;
}
return PERVOE_ZNACHENIE;
и PERVOE_ZNACHENIE не изменять и не обнулять пока не будет нажата клавиша отличная от Enter или "=".
за ранее прошу не пинать! ток начал изучать классы!
мне думается трабла в нажатии на ентер! значение переменной постоянно задается из едита! как с этим боротся!
причем тут классы и давность их изучения?
1. код действительно блондинистый - ЗАГЛАВНЫЕ буквы используют исключительно для именования макросов и глобальных переменных. читать вашу мешанину просто не возможно.
2. в продукте компании борланд - как и во множестве других есть такая штука, как отладчик. никому собственно ваш куркулятор не всрался - и нахождение ошибок в криво написанном коде задача не из приятных. поэтому ставьте точку останова и проверяйте что и куда вводиться - никто на форме этим заниматься не должен.
Боков у вас хватает - исправлять подобное "произведение" надо с самого начала - с замены кодера :). шучу. :)
установите брекпоинт и вы легко сами найдете ошибку - и возможно исправите остальные :)
1. код действительно блондинистый - ЗАГЛАВНЫЕ буквы используют исключительно для именования макросов и глобальных переменных. читать вашу мешанину просто не возможно.
2. в продукте компании борланд - как и во множестве других есть такая штука, как отладчик. никому собственно ваш куркулятор не всрался - и нахождение ошибок в криво написанном коде задача не из приятных. поэтому ставьте точку останова и проверяйте что и куда вводиться - никто на форме этим заниматься не должен.
Боков у вас хватает - исправлять подобное "произведение" надо с самого начала - с замены кодера :). шучу. :)
установите брекпоинт и вы легко сами найдете ошибку - и возможно исправите остальные :)
дык не в ошибке дело!
просто я пытаюсь отработать нажатие ентера!
ну да ладно спс!