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.

- Rejestracja:około 4 lata
- Ostatnio:około 4 lata
- Postów:5
- Rejestracja:prawie 11 lat
- Ostatnio:prawie 3 lata
- Postów:1493
Pokaż kod. Ale pewnie jakaś niejawna konwersja następuje.

- Rejestracja:około 4 lata
- Ostatnio:około 4 lata
- Postów:5
//---------------------------------------------------------------------------
#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 = "";
}
//---------------------------------------------------------------------------


- Rejestracja:ponad 21 lat
- Ostatnio:3 minuty
KoweQ napisał(a):
tabela -> Caption = tabela -> Caption + "4";
Przecież robisz + "4"
to czego się spodziewasz…
4
to liczba.
"4"
to tekst.

- Rejestracja:ponad 21 lat
- Ostatnio:3 minuty
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.

- Rejestracja:około 4 lata
- Ostatnio:około 4 lata
- Postów:5
@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.

- Rejestracja:ponad 9 lat
- Ostatnio:7 dni
- Postów:1082
@KoweQ absolutnie. Masz coś źle zrobione. Jest dokładnie tak jak kolega @Azarien mówi. Masz tu dowód
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.
- screenshot-20210313183629.png (56 KB) - ściągnięć: 74