Dodawanie w c++ builder 6

Dodawanie w c++ builder 6
KoweQ
  • Rejestracja:około 4 lata
  • Ostatnio:około 4 lata
  • Postów:5
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.

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:mniej niż minuta
  • Lokalizacja:Szczecin
2

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


Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 7 godzin
1

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

AL
  • Rejestracja:prawie 11 lat
  • Ostatnio:około 3 lata
  • Postów:1493
1

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

KoweQ
  • Rejestracja:około 4 lata
  • Ostatnio:około 4 lata
  • Postów:5
0
Kopiuj
//---------------------------------------------------------------------------

#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 = "";
}
//---------------------------------------------------------------------------
edytowany 2x, ostatnio: kq
Tasmanian Devil
Hej! Twój post prawdopodobnie zawiera niesformatowany kod. Użyj znaczników ``` aby oznaczyć, co jest kodem, będzie łatwiej czytać. (jestem botem, ta akcja została wykonana automatycznie, prawdopodobieństwo 0.9996368)
KoweQ
  • Rejestracja:około 4 lata
  • Ostatnio:około 4 lata
  • Postów:5
0

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

Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 7 godzin
1
KoweQ napisał(a):
Kopiuj
tabela -> Caption = tabela -> Caption + "4";

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

4 to liczba.
"4" to tekst.

edytowany 2x, ostatnio: Azarien
KoweQ
  • Rejestracja:około 4 lata
  • Ostatnio:około 4 lata
  • Postów:5
0

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

edytowany 1x, ostatnio: KoweQ
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 7 godzin
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

Kopiuj
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.

edytowany 2x, ostatnio: Azarien
KoweQ
  • Rejestracja:około 4 lata
  • Ostatnio:około 4 lata
  • Postów:5
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.

Azarien
w kodzie który podałeś wyżej zmienne pst i psts są typu AnsiString, nie double.
MY
  • Rejestracja:ponad 9 lat
  • Ostatnio:9 dni
  • Postów:1083
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.

edytowany 1x, ostatnio: Mr.YaHooo

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.