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

c++ builder , problem przy konwersji

VPS Starter Arubacloud
0 głosów
389 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 899 wizyt
0 głosów
4 odpowiedzi 1,719 wizyt
pytanie zadane 10 kwietnia 2017 w C i C++ przez Beliaris Nowicjusz (150 p.)
0 głosów
1 odpowiedź 260 wizyt

92,452 zapytań

141,262 odpowiedzi

319,077 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...