|
답변이 난감한 질문 같아요
[답변]
준비 1). Header 파일에 AnsiString변수 2개 선언하세요( 가능하면 TForm1 클래스 안에 )
AnsiString sNum1,sNum2;
cpp 처리
0) 초기화 sNum1=sNum2=Operater="" ;
1) Button1Click 때 입력 받으면 Label1->Caption에 쓰기전에 String에 넣으세요
if(Operater.Length()<1) sNum1+="1" ; //--> 이런식으로요
else sNum2+="1" ;
그다음
Label1->Caption= sNum1+ Operater + sNum2 ; //이렇게 하면 '=' 입력 받기 전까지모두 나오겠죠?
2) EnterClick ('=')클릭때는?
계산은
float fNum1 = StrToFloat( sNum 1) ;
float fNum2 = StrToFloat( sNum 2) ;
float fResult ;
switch ( Operater)
{
case '+' :
fResult = fNum1+ fNum2:
break ;
case '-' :
fResult = fNum1+ fNum2:
break ;
........
}
Label1->Caption = sNum1+ Operater + sNum2 +" = " + FloatToStr( fResult ) ;
뭐 위와같은식으로 하면 님의 질문에 답변은 되겠네요
[참고]
* 질문외에 몇가지 말씀드리면
1) ButtonClick을 이벤트를 하나의 함수로 하시는것이 좋을것 같네요
- Object Inspecter - Events 에서 OnClick 에서 모두 같은것으로 선택하면 됩니다.
- 그럼 1번 클릭했는지 2번 클릭했는지 아는 방법은 ButtonClick 함수에 인자로 Sender가 넘어 옵니다.
- 이 Sender를 TButton 으로 cast 하시면 어떤버튼인지 알수가 있습니다.
- Button에 tag값을 0 ~ 9 까지 준후 Sender를 TButton으로 cast 하여 Tag값을 보고 처리합니다.
2) EnterClick을
- 만약 "Operater" 입력하지 않고 하면 어떻게 됩니까?
- 만약 "Operater"까지만 입력하고 두번째 숫자는 아무것도 입력하지 않고 하면 어떻게 되죠?
- 만약 아무것도 입력하지 않고 클릭하면 어떻게 되죠?
............
이런 여러가지 상황에 대한 예외 처리가 없네요
..................
도움 ㅠㅠ 님이 쓰신 글 :
: 제가 계산기 프로그램을 만드는데요..
:
: C를 공부한지 한4년이 지난지라.. 많이 까먹어서 다시 공부를 하려고 합니다.
:
: 참고로 C++빌더는 사용해본적이 없어서 비주얼씨리즈랑 좀 비슷한거 같기도 하구용..
:
: 근데 문제는 보통 계산기가 숫자를 입력하고 연산자를 넣고 숫자를 입력하고 = 버튼을 눌러서 계산을 하자나요
:
: 근데 거기서 숫자를 입력하고 다음 연산자를 넣고 또 숫자를 넣으면 전에 썻던 숫자가 화면에 없어지고 지금 쓴 숫자가 나
:
: 오자나용 여기서 제가 묻고 싶은거는 3+2=5 <-- 이런식으로 전부다 화면에 나올수 있도록 만들고 싶거든요..
:
: 지금까지한 소스 올립니다.. 도움요청해요~
:
: 아참 한가지더 라벨에 나온 예)3+2=5를 그대로 텍스트파일로 저장하고 불러오기도 하려고 하는데요
:
: 그럼 윈도우계산기처럼 젤위에 뭐 메뉴같은게 있어야 할텐데.. 빌더는 그걸 어케하죵..
:
: 그리고 저장하고 불러오는 것도 가르켜주심 감사... 보고 공부 열심히 해야겠네용..
:
: 고쳐야 할부분 등등 자세히 소스를 갈켜주시면 감사해요 ㅠㅠ
:
: #include <vcl.h>
: #pragma hdrstop
:
: #include "Unit.h"
: //---------------------------------------------------------------------------
: #pragma package(smart_init)
: #pragma resource "*.dfm"
: TForm1 *Form1;
: double Pre_Num; //처음 입력한 숫자를 기억하는 변수
: bool Dot_Check; // 소수점 입력을 체크하는 변수
: bool InNew; // 처음 숫자 입력인자를 체크하는 변수
: AnsiString Operator; // 선택한 연산자를 기억하는 변수
:
: //---------------------------------------------------------------------------
: __fastcall TForm1::TForm1(TComponent* Owner)
: : TForm(Owner)
: {
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TForm1::FormCreate(TObject *Sender)
: {
: Pre_Num = 0;
: Dot_Check = false;
: InNew = true;
: Operator = "";
: Label1->Font->Style = Label1->Font->Style << fsBold;
:
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::btn_7Click(TObject *Sender)
: {
: if (InNew) {
: Label1->Caption = "";
: InNew = false;
: }
: if (Label1->Caption == "0")
: Label1->Caption = "7";
:
: else
: Label1->Caption = Label1->Caption + "7";
:
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::btn_8Click(TObject *Sender)
: {
: if (InNew) {
: Label1->Caption = "";
: InNew = false;
: }
:
: if (Label1->Caption == "0")
: Label1->Caption = "8";
:
: else
: Label1->Caption = Label1->Caption + "8";
:
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::btn_9Click(TObject *Sender)
: {
: if (InNew) {
: Label1->Caption = "";
: InNew = false;
: }
:
: if (Label1->Caption == "0")
: Label1->Caption = "9";
:
: else
: Label1->Caption = Label1->Caption + "9";
:
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::btn_4Click(TObject *Sender)
: {
: if (InNew) {
: Label1->Caption = "";
: InNew = false;
: }
:
: if (Label1->Caption == "0")
: Label1->Caption = "4";
:
: else
: Label1->Caption = Label1->Caption + "4";
:
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::btn_5Click(TObject *Sender)
: {
: if (InNew) {
: Label1->Caption = "";
: InNew = false;
: }
:
: if (Label1->Caption == "0")
: Label1->Caption = "5";
:
: else
: Label1->Caption = Label1->Caption + "5";
:
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::btn_6Click(TObject *Sender)
: {
: if (InNew) {
: Label1->Caption = "";
: InNew = false;
: }
:
: if (Label1->Caption == "0")
: Label1->Caption = "6";
:
: else
: Label1->Caption = Label1->Caption + "6";
:
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::btn_1Click(TObject *Sender)
: {
: if (InNew) {
: Label1->Caption = "";
: InNew = false;
: }
:
: if (Label1->Caption == "0")
: Label1->Caption = "1";
:
: else
: Label1->Caption = Label1->Caption + "1";
:
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::btn_2Click(TObject *Sender)
: {
: if (InNew) {
: Label1->Caption = "";
: InNew = false;
: }
:
: if (Label1->Caption == "0")
: Label1->Caption = "2";
:
: else
: Label1->Caption = Label1->Caption + "2";
:
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::btn_3Click(TObject *Sender)
: {
: if (InNew) {
: Label1->Caption = "";
: InNew = false;
: }
:
: if (Label1->Caption == "0")
: Label1->Caption = "3";
: else
: Label1->Caption = Label1->Caption + "3";
:
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::btn_0Click(TObject *Sender)
: {
: if (InNew) {
: Label1->Caption = "";
: InNew = false;
: }
: // 새로운 숫자 데이터 입력이면 Label1에 표시된 문자열을 지운다.
: if (Label1->Caption == "0")
: return;
: // 현재 Label1에 표시된 문자열이 "0"이면 이벤트 처리 함수를 종료한다.
: else
: Label1->Caption = Label1->Caption + "0";
: // 현재 Label1에 표시된 문자열이 "0"이 아니면 문자열 "0"을 더한다.
: // 예를 들어 "1"이 표시되어 있으면 Label1에 표시된 문자열을 "10"으로 만든다.
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::btn_CClick(TObject *Sender)
: {
: Label1->Caption = "0";
: FormCreate(this);
:
: }
: //---------------------------------------------------------------------------
:
: void __fastcall TForm1::bnt_CEClick(TObject *Sender)
: {
: Label1->Caption = "0";
: Dot_Check = false;
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::btn_dotClick(TObject *Sender)
: {
: if (InNew) {
: Label1->Caption = "";
: InNew = false;
: }
:
: if (Dot_Check) return;
: // "." 입력이 있었으면 함수를 종료한다.
: Label1->Caption = Label1->Caption + ".";
: // "."가 입력되어 있지 않으면 Label1의 속성에 입력되어 있는 문자열에 "."를 더한다.
: Dot_Check = true;
: // "."를 Label1의 Caption 문자열에 더한 후 "." 문자를 입력했다는 표시를
: // Dot_Check 변수에 저장한다.
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::btn_divClick(TObject *Sender)
: {
: Pre_Num = StrToInt(Label1->Caption);
: // Label1의 Caption 속성에 표시된 문자열을 Float형 데이터로 변환하여
: // Pre_Num 변수에 저장한다.
: InNew = true;
: Dot_Check = false;
: Operator = btn_div->Caption;
: // 나누기 문자(/)르 변수에 저장한다.
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::btn_MulClick(TObject *Sender)
: {
: Pre_Num = StrToInt(Label1->Caption);
: InNew = true;
: Dot_Check = false;
: Operator = btn_Mul->Caption ;
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::btn_minusClick(TObject *Sender)
: {
: Pre_Num = StrToInt(Label1->Caption);
: InNew = true;
: Dot_Check = false;
: Operator = btn_minus->Caption ;
:
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::btn_plusClick(TObject *Sender)
: {
: Pre_Num = StrToInt(Label1->Caption);
: InNew = true;
: Dot_Check = false;
: Operator = btn_plus->Caption ;
:
: }
:
: //---------------------------------------------------------------------------
: void __fastcall TForm1::btn_EnterClick(TObject *Sender)
: {
: AnsiString Temp = Label1->Caption;
: if (Operator == "/") {
: Label1->Caption = FloatToStr((Pre_Num / StrToFloat(Temp)));
: } else if(Operator == "*") { // 나누기 연산 결과를 출력한다.
: Label1->Caption = FloatToStr((Pre_Num * StrToFloat(Temp)));
: } else if(Operator == "+") { // 곱하기 연산 결과를 출력한다.
: Label1->Caption = FloatToStr((Pre_Num + StrToFloat(Temp)));
: } else if(Operator == "-") { // 더하기 연산 결과를 출력한다.
: Label1->Caption = FloatToStr((Pre_Num - StrToFloat(Temp)));
: }
:
: FormCreate(this);
: // 모든 변수를 초기화 한다.
: }
|