• 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,380 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,380 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,380 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 267 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
Wynikowy wygląd pytania, odpowiedzi czy komentarza, różni się od tego zaprezentowanego w edytorze postów. Stosuj więc funkcję Podgląd posta znajdującą się pod edytorem, aby upewnić się, czy na pewno ostateczny rezultat ci odpowiada.Podgląd posta

66,513 zapytań

113,278 odpowiedzi

239,907 komentarzy

46,647 pasjonatów

Przeglądających: 225
Pasjonatów: 22 Gości: 203

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.

...