• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

c++ builder , problem przy konwersji

Object Storage Arubacloud
0 głosów
402 wizyt
pytanie zadane 5 września 2017 w C i C++ przez Kubusiek94 Nowicjusz (210 p.)

Cześć, mam problem ponieważ w c++ builderze za pomocą jednego okna TEdit chce wprowadzać dane liczbowe, a w drugim wyświetlać wynik po np. przemnożeniu przez 4. Problem pojawia się gdy zamiast liczb wpisuje znaki tylko "das//", przy pustym polu jakoś dałem warunek, ale nie potrafię sobie poradzić z innymi znakami niż cyfry

 

float i = Edit1->Text.ToDouble();
      float c = i+2;
      Edit2->Text=CurrToStr(c);

Taka konwersja powoduje błąd przy wpisaniu liter, czy mogę jakiś warunek napisać, np. gdy wpiszę inny znak niż cyfrę to wyświetli mi "Błąd"?

Czytałem o czymś jak static case , ale trochę tego nie rozumiem

1 odpowiedź

+1 głos
odpowiedź 5 września 2017 przez j23 Mędrzec (194,920 p.)
wybrane 5 września 2017 przez Kubusiek94
 
Najlepsza

Zapewne ToDouble() rzuca wyjątkiem w momencie, gdy nie może dokonać konwersji. Jakoś tak powinno być:

try
{
      float i = Edit1->Text.ToDouble();
      float c = i+2;
      Edit2->Text=CurrToStr(c);
}
catch (EConvertError  &err)
{
        ShowMessage(err.Message);
}

 

komentarz 5 września 2017 przez Kubusiek94 Nowicjusz (210 p.)
No tak też robiłem ... ale - nie chce żeby mi wyskakiwało okno, tylko żeby np. ustawiło domyślnie "0" w drugim okienku. Dla inta jest taka funkcja,ale dla floatów nie ma.
Pomimo używania tej funkcji kompilator przy teście wywala blędy
komentarz 5 września 2017 przez j23 Mędrzec (194,920 p.)
edycja 5 września 2017 przez j23

Ten ShowMesage() dałem dla przykładu, bo chciałeś, żeby wyświetliło Ci "Błąd". Jak chcesz mieć tam domyślne zero, to sobie wstaw wywołanie Edit2->Text = CurrToStr(2);  w bloku catch.

 

Pomimo używania tej funkcji kompilator przy teście wywala blędy

Nie wiem, jak to rozumieć. Błędy, jakie? Z tego, co pamiętam, w C++ Builderze debugger zatrzymywał się w miejscu, gdzie wyskoczył jakiś wyjątek, nawet jeśli była poprawna jego obsługa. Klikasz komendę, która każe debuggerowi wykonywać program dalej i po sprawie.

komentarz 5 września 2017 przez Kubusiek94 Nowicjusz (210 p.)
Dziękuję, w .exe działa.
Te funkcje to działają tak:
- rob to co w "try", a jeśli jest jakiś błąd to wykonaj "catch"?
komentarz 5 września 2017 przez j23 Mędrzec (194,920 p.)

Generalnie tak, ale nie jakiś błąd, tylko, w tym przypadku, EConvertError, który według dokumentacji jest rzucany przez ToDouble() . Każdy inny wyjątek nie zostanie przechwycony.

Podobne pytania

+1 głos
2 odpowiedzi 933 wizyt
0 głosów
4 odpowiedzi 1,759 wizyt
pytanie zadane 10 kwietnia 2017 w C i C++ przez Beliaris Nowicjusz (150 p.)
0 głosów
1 odpowiedź 269 wizyt

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...