Dodawanie w c++ builder 6

0

Witam mam problem bo nie wiem jak poprawnie dodać liczby, już tłumaczę o co chodzi.
Ten problem występuje tylko przy dodawaniu a mianowicie:
Gdy chcę określić Caption w jakimś napisie np.
Label1 -> Caption = 4+4;
To w napisie pojawia się zamiast 8 to 44.
Tak samo przy dodawaniu zmiennych double, int, lub chociażby float.
Ktoś wie jak to rozwiązać może jakiś inny znak trzeba dać czy coś?
Chciałbym podkreślić że ten błąd wystąpił w środowisku C++ Builder 6, i niewiem czy w innych też występuje.

2

Pewnie operujesz na stringach, a nie na liczbach. Ale bez kodu można tylko gdybać.

1

Przecież 4+4=8, poprawnie ci dodaje.

1

Pokaż kod. Ale pewnie jakaś niejawna konwersja następuje.

0
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
AnsiString pst, psts, jd;
Double liczba1, liczba2, suma;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::p1Click(TObject *Sender)
{
 tabela -> Caption = tabela -> Caption + "1";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::p2Click(TObject *Sender)
{
 tabela -> Caption = tabela -> Caption + "2";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::p3Click(TObject *Sender)
{
 tabela -> Caption = tabela -> Caption + "3";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::p4Click(TObject *Sender)
{
 tabela -> Caption = tabela -> Caption + "4";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::p5Click(TObject *Sender)
{
 tabela -> Caption = tabela -> Caption + "5";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::p6Click(TObject *Sender)
{
 tabela -> Caption = tabela -> Caption + "6";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::p7Click(TObject *Sender)
{
 tabela -> Caption = tabela -> Caption + "7";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::p8Click(TObject *Sender)
{
 tabela -> Caption = tabela -> Caption + "8";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::p9Click(TObject *Sender)
{
 tabela -> Caption = tabela -> Caption + "9";
}
//---------------------------------------------------------------------------

void __fastcall TForm1::dodajClick(TObject *Sender)
{
 psts = stary -> Caption;
 pst = tabela -> Caption;
``` stary -> Caption = pst + psts; ```
 prefix -> Caption = "+";
 tabela -> Caption = "";
 }
//---------------------------------------------------------------------------

void __fastcall TForm1::odejmijClick(TObject *Sender)
{
 psts = stary -> Caption;
 pst = tabela -> Caption;
 stary -> Caption = pst + psts;
 prefix -> Caption = "-";
 tabela -> Caption = "";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::pomnozClick(TObject *Sender)
{
 psts = stary -> Caption;
 pst = tabela -> Caption;
 stary -> Caption = pst + psts;
 prefix -> Caption = "*";
 tabela -> Caption = "";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::podzielClick(TObject *Sender)
{
 psts = stary -> Caption;
 pst = tabela -> Caption;
 stary -> Caption = pst + psts;
 prefix -> Caption = "/";
 tabela -> Caption = "";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::sumujClick(TObject *Sender)
{
jd = prefix -> Caption;

if (jd == "+")
{
 liczba1 = tabela -> Caption.ToDouble();
 liczba2 = stary -> Caption.ToDouble();
 tabela -> Caption = liczba2+liczba1;
 stary -> Caption = "";
 prefix -> Caption = "";
 }

else if (jd == "-")
{
 liczba1 = tabela -> Caption.ToDouble();
 liczba2 = stary -> Caption.ToDouble();
 tabela -> Caption = liczba2-liczba1;
 stary -> Caption = "";
 prefix -> Caption = "";
}

else if (jd == "*")
{
 liczba1 = tabela -> Caption.ToDouble();
 liczba2 = stary -> Caption.ToDouble();
 tabela -> Caption = liczba2*liczba1;
 stary -> Caption = "";
 prefix -> Caption = "";
}

else if (jd == "/")
{
 liczba1 = tabela -> Caption.ToDouble();
 liczba2 = stary -> Caption.ToDouble();
 tabela -> Caption = liczba2/liczba1;
 stary -> Caption = "";
 prefix -> Caption = "";
}

}
//---------------------------------------------------------------------------
void __fastcall TForm1::clearClick(TObject *Sender)
{
stary -> Caption = "";
tabela -> Caption = "";
prefix -> Caption = "";
}
//---------------------------------------------------------------------------
0

@Azarien: No właśnie pisze że powinno 4+4=8.
ALE JEST 4+4=44

1
KoweQ napisał(a):
tabela -> Caption = tabela -> Caption + "4";

Przecież robisz + "4" to czego się spodziewasz…

4 to liczba.
"4" to tekst.

0

@Azarien: w tym momencie tekstu chcę aby tak się działo, lecz spójź gdy dodaję dwie zmienne typu Double pst i psts

1
KoweQ napisał(a):

@Azarien: w tym momencie tekstu chcę aby tak się działo, lecz spójź gdy dodaję dwie zmienne typu Double pst i psts

AnsiString pst, psts, jd;

które zmienne typu Double?

C++ to język ściśle typowany. double 4 plus double 4 daje double 8, bo dodajesz liczby.
Ale AnsiString "4" plus AnsiString "4" daje AnsiStringa "44", bo łączysz stringi.

0

@Azarien: Wiem, lecz gdy w tej linijce:

stary -> Caption = pst + psts;

dodałem zmienną "pst" typu double, do zmiennej "psts" typu double, to i tak dodawanie traktuje to jak tekst i konkatenuje te zmienne, zamiast potraktować to jako działanie.

1

@KoweQ absolutnie. Masz coś źle zrobione. Jest dokładnie tak jak kolega @Azarien mówi. Masz tu dowód
screenshot-20210313183629.png

Co więcej zostaw ten kurs Pana Z. i przesiądź się na jakieś IDE które zostało stworzone w tym wieku. Nie mówię, ze C++ Builder jest zły, ale pisanie w ten sposób prowadzi do powstawania kodu spahgetti. To co napisałeś tak pracowicie można by skrócić kilkukrotnie gdyby napisać bez zbędnych powtórzeń kodu. Popatrz, że te zdarzenia w większości są podobne. Poza tym kontrolki wizualne służą tylko wyświetlaniu danych, a nie trzymaniu w nich danych.

1 użytkowników online, w tym zalogowanych: 0, gości: 1