초보이신가 보네요...
일반적으로 계산기에 11번 버튼이 있나요?
질문이 파악하기 위해.. 소스전체를 죽 확인해야 하네요..
조언1. Naming을 하세요
Control / 변수에 Naming을 하세요.
변수이름만 봐도(또는 control의 이름만 봐도) 무엇하는 놈인지..
어떤 목적으로 쓰일지 쉽게 파악되기 때문입니다.
C++Builder에서 자동생성되는 이벤트 함수들은 Control의 Name을 prefix로 가집니다.
Control(또는 Componnet)에 Naming만 하면 함수도 자동으로 naming이 되게 됩니다.
조언2. 중복을 줄이세요
중복을 완전이 없애는것이 반드시 좋은것은 아닙니다만..
대게의 경우 중복을 없애는것이 좋습니다.
아래 코드에서는...
버튼 0에서 9까지 버튼 클릭시 동작코드가 거의 똑같습니다.
Temp변수 하나를 제외하고 ..
조언3. Sender를 활용하세요
vcl에서는 Event-Method에서는 TObject *Sender라는 파라메터가 항상 첫번째 파라메터로 있습니다.
아래 코드에서도
void __fastcall TForm1::BEdit1Click(TObject *Sender)
함수에서의 Sender는 BEdit1이 됩니다.
이 Sender를 활용하면 훨씬 객체지향적으로.. 그리고 중복을 많이 없앨수 있습니다.
참조
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=965
위 링크에 퀴즈내용과 댓글을 잘 읽어보세요
조언4. 기타...
* 계산을 배정도(double 형)으로 하면서 .. 결과는 단정도(float형)으로 받네요
* Edit에 직접 키보드 입력을 받을수 있도록 한것같은데..
숫자외의 입력에 대한 제한이 없네요..
* 변수를 Naming할때 변수의 타입을 알수 있도록 하면 좋을것 같습니다.
String변수인지 bool변수인지.. double인지 float인지...
* 코드중복뿐만 아니라 실행의 중복또한 없애도록 하세요
BEdit11ClickClick 함수에서 cal=false 하고 있는데..
계산함수의 AddRq,BddRq,CddRq... 함수에서도 똑같은 코드가 있네요
* .....
---------------------------------------------------------------------------------
질문에 대한 해석과 답변
음.. 버튼11을 누르지 않고 계산하겠다는것은?
숫자입력창(Edit1)에서 숫자입력하다가 enter키를 클릭했을때 계산하도록 하고 싶다는 뜻으로 유추됩니다.
맞습니까?
대게 이런경우 Edit1의 KeyPress이벤트를 이용하여
Key값이 VK_RETURN (13) 이면 무엇인가 동작하도록 처리합니다.
그럼...
푸히히 님이 쓰신 글 :
: 현재 계산기 프로그램 연습중인데 ㅋㅋ
: 연속 사칙연산에서 버튼 11을 누르지 않으면 안되네요 ㅉㅉㅉ
: 고수님들의 조언 부탁드립니다 ㅋ
:
:
: //---------------------------------------------------------------------------
:
: #include <vcl.h>
: #include <Sysutils.hpp>
: #pragma hdrstop
:
: #include "Unit1.h"
: //---------------------------------------------------------------------------
: #pragma package(smart_init)
: #pragma link "Excel_2K_SRVR"
: #pragma resource "*.dfm"1
: TForm1 *Form1;
: //---------------------------------------------------------------------------
: __fastcall TForm1::TForm1(TComponent* Owner)
: : TForm(Owner)
: {
: }
:
: //---------------------------------------------------------------------------
: void __fastcall TForm1::BEdit1Click(TObject *Sender)
: {
: AnsiString Temp ="1";
: if(!Cal)Num1 += Temp;
: else Num2 += Temp;
: if(!Cal)Edit1->Text = Num1;
: else Edit1->Text = Num2;
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::BEdit2ClickClick(TObject *Sender)
: {
: AnsiString Temp ="2";
: if(!Cal)Num1 += Temp;
: else Num2 += Temp;
: if(!Cal)Edit1->Text = Num1;
: else Edit1->Text = Num2;
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::BEdit3ClickClick(TObject *Sender)
: {
: AnsiString Temp ="3";
: if(!Cal)Num1 += Temp;
: else Num2 += Temp;
: if(!Cal)Edit1->Text = Num1;
: else Edit1->Text = Num2;
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::BEdit4ClickClick(TObject *Sender)
: {
: AnsiString Temp ="4";
: if(!Cal)Num1 += Temp;
: else Num2 += Temp;
: if(!Cal)Edit1->Text = Num1;
: else Edit1->Text = Num2;
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::BEdit5ClickClick(TObject *Sender)
: {
: AnsiString Temp ="5";
: if(!Cal)Num1 += Temp;
: else Num2 += Temp;
: if(!Cal)Edit1->Text = Num1;
: else Edit1->Text = Num2;
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::BEdit6ClickClick(TObject *Sender)
: {
: AnsiString Temp ="6";
: if(!Cal)Num1 += Temp;
: else Num2 += Temp;
: if(!Cal)Edit1->Text = Num1;
: else Edit1->Text = Num2;
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::BEdit7ClickClick(TObject *Sender)
: {
: AnsiString Temp ="7";
: if(!Cal)Num1 += Temp;
: else Num2 += Temp;
: if(!Cal)Edit1->Text = Num1;
: else Edit1->Text = Num2;
: }
: //-----------------TJ----------------------------------------------------------
: void __fastcall TForm1::BEdit8ClickClick(TObject *Sender)
: {
: AnsiString Temp ="8";
: if(!Cal)Num1 += Temp;
: else Num2 += Temp;
: if(!Cal)Edit1->Text = Num1;
: else Edit1->Text = Num2;
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::BEdit9ClickClick(TObject *Sender)
: {
: AnsiString Temp ="9";
: if(!Cal)Num1 += Temp;
: else Num2 += Temp;
: if(!Cal)Edit1->Text = Num1;
: else Edit1->Text = Num2;
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::BEdit10ClickClick(TObject *Sender)
: {
: AnsiString Temp ="0";
: if(!Cal)Num1 += Temp;
: else Num2 += Temp;
: if(!Cal)Edit1->Text = Num1;
: else Edit1->Text = Num2;
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::BEdit11ClickClick(TObject *Sender)
: {
: switch(Teach)
: {
: case 1 : EndValue = AddRq(Num1,Num2); break;
: case 2 : EndValue = BddRq(Num1,Num2); break;
: case 3 : EndValue = CddRq(Num1,Num2); break;
: case 4 : EndValue = DddRq(Num1,Num2); break;
: }
: Edit1->Text = EndValue;
: Cal = false;
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::BEdit12ClickClick(TObject *Sender)
: {
: Num2="" ;
: Teach = 1;
: Cal = true;
: AddRq(Num1,Num2);
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::BEdit13ClickClick(TObject *Sender)
: {
: Num2="" ;
: Teach = 2;
: Cal = true;
: BddRq(Num1,Num2);
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::BEdit14ClickClick(TObject *Sender)
: {
: Num2="" ;
: Teach = 3;
: Cal = true;
: CddRq(Num1,Num2);
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::BEdit15ClickClick(TObject *Sender)
: {
: Num2="" ;
: Teach = 4;
: Cal = true;
: DddRq(Num1,Num2);
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::BEdit16ClickClick(TObject *Sender)
: {
: Num1 = "";
: Num2 = "";
: Teach = 0;
: Edit1->Text = "0";
: Cal = false;
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::FormShow(TObject *Sender)
: {
: Cal = false;
: Num1 = "";
: Num2 = "";
: Edit1->Text = "";
: }
: //---------------------------------------------------------------------------
: float __fastcall TForm1::AddRq(AnsiString Add1,AnsiString Add2)
: {
: if(Add2 =="") return 0;
: float Temp1,Temp2,Result;
: Temp1 = Add1.ToDouble();
: Temp2 = Add2.ToDouble();
: Result = Temp1 + Temp2;
: Num1 = Result;
: Cal = false;
: return Result;
: }
: //---------------------------------------------------------------------------
: float __fastcall TForm1::BddRq(AnsiString Add1,AnsiString Add2)
: {
: if(Add2 =="") return 0;
: float Temp1,Temp2,Result;
: Temp1 = Add1.ToDouble();
: Temp2 = Add2.ToDouble();
: Result = Temp1 - Temp2;
: Num1 = Result;
: Cal = false;
: return Result;
: }
: //---------------------------------------------------------------------------
: float __fastcall TForm1::CddRq(AnsiString Add1,AnsiString Add2)
: {
: if(Add2 =="") return 0;
: float Temp1,Temp2,Result;
: Temp1 = Add1.ToDouble();
: Temp2 = Add2.ToDouble();
: Result = Temp1 * Temp2;
: Num1 = Result;
: Cal = false;
: return Result;
: }
: //---------------------------------------------------------------------------
: float __fastcall TForm1::DddRq(AnsiString Add1,AnsiString Add2)
: {
: if(Add2 =="") return 0;
: float Temp1,Temp2,Result;
: Temp1 = Add1.ToDouble();
: Temp2 = Add2.ToDouble();
: Result = Temp1 / Temp2;
: Num1 = Result;
: Cal = false;
: return Result;
: }