|
계산기 만들다 문제가 있는데
몇번올려도 한사람 도움주는사람이없네요
예를들면 1+1+1+1은 =4가 나와야 하는데 2가 나옴니다.
첫번째로 받은 수와 두번쨰 a,b만 받는다는 소린데
두번째 + 버튼을 누르는 순간 입력받은 두수를 a로 만들어서 연산을 이어가게 만들고싶은데
소스좀 부탁드려요.
//--------------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
Tcalculator1 *calculator1;
//---------------------------------------------------------------------------
__fastcall Tcalculator1::Tcalculator1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall Tcalculator1::oneClick(TObject *Sender)
{
if(!on) return;
AnsiString str = result->Text; //ansistring 문자형들
result->Text = result-> Text+1;
}
//---------------------------------------------------------------------------
void __fastcall Tcalculator1::twoClick(TObject *Sender)
{
if(!on) return;
AnsiString str = result->Text;
result->Text = str + "2";
}
//---------------------------------------------------------------------------
void __fastcall Tcalculator1::threeClick(TObject *Sender)
{
if(!on) return;
AnsiString str = result->Text;
result->Text = str + "3";
}
//---------------------------------------------------------------------------
void __fastcall Tcalculator1::fourClick(TObject *Sender)
{
if(!on) return;
AnsiString str = result->Text;
result->Text = str + "4";
}
//---------------------------------------------------------------------------
void __fastcall Tcalculator1::fiveClick(TObject *Sender)
{
if(!on) return;
AnsiString str = result->Text;
result->Text = str + "5";
}
//---------------------------------------------------------------------------
void __fastcall Tcalculator1::sixClick(TObject *Sender)
{
if(!on) return;
AnsiString str = result->Text;
result->Text = str + "6";
}
//---------------------------------------------------------------------------
void __fastcall Tcalculator1::sevenClick(TObject *Sender)
{
if(!on) return;
AnsiString str = result->Text;
result->Text = str + "7";
}
//---------------------------------------------------------------------------
void __fastcall Tcalculator1::eightClick(TObject *Sender)
{
if(!on) return;
AnsiString str = result->Text;
result->Text = str + "8";
}
//---------------------------------------------------------------------------
void __fastcall Tcalculator1::nineClick(TObject *Sender)
{
if(!on) return;
AnsiString str = result->Text;
result->Text = str + "9";
}
//---------------------------------------------------------------------------
void __fastcall Tcalculator1::zeroClick(TObject *Sender)
{
if(!on) return;
AnsiString str = result->Text;
result->Text = str + "0";
}
//---------------------------------------------------------------------------
void __fastcall Tcalculator1::clearClick(TObject *Sender)
{
if(!on) return;
result->Clear();
}
//---------------------------------------------------------------------------
void __fastcall Tcalculator1::divid1Click(TObject *Sender)
{
if(!on) return;
a = StrToFloat (result->Text);
d = '/';
result->Text = "";
comma = false;
}
//---------------------------------------------------------------------------
void __fastcall Tcalculator1::plus1Click(TObject *Sender)
{
if(!on) return;
a = StrToFloat (result->Text);
d = '+';
result->Text = "";
comma = false;
}
//---------------------------------------------------------------------------
void __fastcall Tcalculator1::clear1Click(TObject *Sender)
{
if(!on) return;
result->Clear();
}
//---------------------------------------------------------------------------
void __fastcall Tcalculator1::minus1Click(TObject *Sender)
{
if(!on) return;
a = StrToFloat (result->Text);
d = '-';
result->Text = "";
comma = false;
}
//---------------------------------------------------------------------------
void __fastcall Tcalculator1::mutifly1Click(TObject *Sender)
{
if(!on) return;
a = StrToFloat (result->Text);
d = '*';
result->Text = "";
comma = false;
}
//---------------------------------------------------------------------------
void __fastcall Tcalculator1::close1Click(TObject *Sender)
{
if(!on) return;
calculator1->Close();
}
//---------------------------------------------------------------------------
void __fastcall Tcalculator1::plusClick(TObject *Sender)
{
if(!on) return;
a = StrToFloat (result->Text);
d = '+';
result->Text = "";
comma = false;
}
//---------------------------------------------------------------------------
void __fastcall Tcalculator1::minusClick(TObject *Sender)
{
if(!on) return;
a = StrToFloat (result->Text);
d = '-';
result->Text = "";
comma = false;
}
//---------------------------------------------------------------------------
void __fastcall Tcalculator1::multiflyClick(TObject *Sender)
{
if(!on) return;
if(!on) return;
a = StrToFloat (result->Text);
d = '*';
result->Text = "";
comma = false;
}
//---------------------------------------------------------------------------
void __fastcall Tcalculator1::dividClick(TObject *Sender)
{
if(!on) return;
a = StrToFloat (result->Text);
d = '/';
result->Text = "";
comma = false;
}
//---------------------------------------------------------------------------
void __fastcall Tcalculator1::commaBTNClick(TObject *Sender)
{
if(!on) return;
if(!comma)
{
AnsiString str = result->Text;
str +='.';
result->Text = str;
comma = true;
}
}
//---------------------------------------------------------------------------
void __fastcall Tcalculator1::equalClick(TObject *Sender)
{
if(!on) return;
if(d == ' ') return;
b = StrToFloat (result->Text);
AnsiString t=0;
switch(d)
{
case '+':t= FloatToStr(a+b);
break; // 1-1) 제한들 두고 배열로 잡아서 해도 될것이구?
// 1-2) 제한을 두지 않으려면 .. 계속 늘어날수 있는 데이타 구조체가 필요할 것입니다.
// 1-3) 아니면 xp 윈두우 계산기 처럼 세번째 입력시작할때 첫번째와 두번째 결과를 첫번째 변수에 저장해 두는방식도 있구요
// 1-4) 또는 변수를 입력할때마다 저장하지 말고..
// 입력을 string으로 받고 ( "50+9+23=" ) 문자열을 파싱해서 처리하는 방법도 있습니다.
case '-':t= FloatToStr(a-b);
break;
case '*':t= FloatToStr(a*b);
break;
case '/': if(b!=0) t= FloatToStr(a/b);
else t = ("can't be divided by zero..");
break;
}
result->Text= t;
}
//---------------------------------------------------------------------------
void __fastcall Tcalculator1::onBTNClick(TObject *Sender)
{
result->Text = "";
d = ' ';
comma=false;
on=true;
}
//---------------------------------------------------------------------------
void __fastcall Tcalculator1::offClick(TObject *Sender)
{
result->Text = "";
d= ' ';
comma=false;
on=false;
}
//---------------------------------------------------------------------------
void __fastcall Tcalculator1::result1Click(TObject *Sender)
{
if(!on) return;
if(d == ' ') return;
b = StrToFloat (result->Text);
AnsiString t=0;
switch(d)
{
case '+':t= FloatToStr(a+b);
break;
case '-':t= FloatToStr(a-b); break;
case '*':t= FloatToStr(a*b); break;
case '/': if(a==0) t= FloatToStr(a/b);
else t = ("can't be divided by zero..");
break;
}
result->Text= t;
}
//---------------------------------------------------------------------------
|