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

c++ builder , problem przy konwersji

0 głosów
85 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 VIP (106,320 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 VIP (106,320 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 VIP (106,320 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 325 wizyt
0 głosów
4 odpowiedzi 265 wizyt
pytanie zadane 10 kwietnia 2017 w C i C++ przez Beliaris Nowicjusz (150 p.)
0 głosów
1 odpowiedź 114 wizyt
Porady nie od parady
Publikując kody źródłowe korzystaj ze specjalnego bloczku koloryzującego składnię (przycisk z napisem code w edytorze). Nie zapomnij o ustawieniu odpowiedniego języka z rozwijanego menu oraz czytelnym formatowaniu kodu.Przycisk code

66,398 zapytań

113,152 odpowiedzi

239,540 komentarzy

46,660 pasjonatów

Przeglądających: 324
Pasjonatów: 16 Gości: 308

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...