try i except

0

Witam
Program który pisze głównie zajmuje sie liczeniem. I chcę żeby mówił mi która zmienna typu Currency jest zła.

A więc zrobić żeby try i except odnosiły się do każdej zmiennej. np w zmienej "a" jest błąd
i program robi polecenia gdy w zmiennej "a" jest coś nie tak i w całości obliczeń.
np: kiedy zmienna "a" wynosi 12www to w Labelu pojawi sie informacja 'coś tam' i pojawia się Panel1.
Próbowałem tak:

var
 a,b:Currency;
begin
 try
  try
   a:=strtocurr(edit1.Text);
  except
   Label.Caption:='Coś tam';
  end 
   b:=strtocurr(edit2.Text);
   Label1.Caption:=currtostr(a*b);
 except
Panel1.Visible:=true;
end;

ale zmienna "a" nie może być zinicjpwana i pojawia się tylko Panel1.

Proszę o pomoc.

// Używaj tagu Delphi - detox

0

Spróbuj skorzystać z tego kodu, pamiętam że kiedyś też się nad tym głowiłem i odpowiedz znalazłem z encyklodedii na tej stronie (tylko nie wiem czy ona jeszcze istnieje). Oto kodzik:

var a1,b1:Extended;
    Code: Integer;
begin
  Try
    Val(Edit1.Text,a1,Code);
    Val(Edit2.Text,b1,Code);
    Label1.Caption:=FloatToStr(a1*b1);
  except
   showmessage('Wystąpił błąd');
  end;
end;
0

Masz podwójne try.

Zrób to po kolei.

try
 blablabla;
except
end;

try
 blablabla;
except 
end;
0

Kiedy robie po kolei to wyświetla mi się taki błąd

[Warning] Unit1.pas(167): Variable 'a' might not have been initialized
[Warning] Unit1.pas(167): Variable 'b' might not have been initialized

a kod mam taki

try
a:=strtocurr(edit1.Text);
except
label1.Caption:='coś tam';
end;
try
b:=strtocurr(edit2.Text);
except
label2.Caption:='coś tam';
end;
0

Kiedy robie po kolei to wyświetla mi się taki błąd
[Warning] Unit1.pas(167): Variable 'a' might not have been initialized
[Warning] Unit1.pas(167): Variable 'b' might not have been initialized

No i co z tego? Jak zrobisz np:

...
if a=5 then b=20;
...

To też będziesz miał taki warning. To mówi o tym, że jeśli coś pójdzie nie tak, to wtedy nic nie będzie robione z a.

0

Kiedy robie po kolei to wyświetla mi się taki błąd
[Warning] Unit1.pas(167): Variable 'a' might not have been initialized
[Warning] Unit1.pas(167): Variable 'b' might not have been initialized

No i co z tego? Jak zrobisz np:

...
if a=5 then b=20;
...

To też będziesz miał taki warning. To mówi o tym, że jeśli coś pójdzie nie tak, to wtedy nic nie będzie robione z a.

Te ostrzeżenia mówią, że zmienne mogą nie zostać zainicjalizowane. Wstaw na początku procedury/funkcji 2 instrukcje:

a := 0.0;
b := 0.0;

i po ostrzeżeniach. Fakt, że to strata czasu procesora, ale zmienne masz zawsze zainicjalizowane. Można też wyłączyć ostrzeżenia:

{$WARNINGS Off}
// tutaj kod powodujący generowanie ostrzeżeń
{$WARNINGS On}

ale nie polecam tego drugiego rozwiązania (chyba że np. między tymi dyrektywami będzie 1 instrukcja np. porównywanie zmiennych ze znakiem i bez znaku).

0

Zrobiłem wszystko po kolei nie ort! juz na Warning i teraz następny problem kiedy do jednej zmiennej wpisze jakiś tekst (string) (mam 5 zmiennych) to wdedy wykonują się operacje na pozostałych 4 zmiennych podając niepoprawny wynik.
Oczywiście do tej zmiennej do której wpisałem tekst wykonał się kod błędu ale co z tego jak został podany wynik.

0

Nie mam teraz Delphi, ale jeśli masz sprawdzanie przez

except
 // Tutaj twoje instrukcje..

.. i na końcu dajesz except, to on już nie wykrywa tych błędów co w pierwszym except, bo już zostały one "wykryte"... - spróbuj wstawić raise; w pierwszym except - i wtedy uzyskasz co chciałeś.. - ale głowy nie dam...

0

Nie mam teraz Delphi, ale jeśli masz sprawdzanie przez

except
 // Tutaj twoje instrukcje..

.. i na końcu dajesz except, to on już nie wykrywa tych błędów co w pierwszym except, bo już zostały one "wykryte"... - spróbuj wstawić raise; w pierwszym except - i wtedy uzyskasz co chciałeś.. - ale głowy nie dam...

Albo po prostu posłuż się Exit;

try
 blabla;
except
 blabla2;
 exit;
end;

Wtedy po napotkaniu błędu, wykona się to, co ma się wykonać i procedura zostanie opuszczona, czyli nic dalej się nie zrobi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1