![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Исключ. ситуац. [D6, WinXP]
Kaldr © (2002-05-31 11:46:00)Помогите разобраться с исключ. ситуациями здесь может возникать деление на ноль или еще что-то вот такая штука не работает:
Case d of
.............
4: try
begin if StrToFloat(Label1.Caption)<>0 then
label1.Caption:=FloatToStr(StrToFloat(f)/StrToFloat(Label1.Caption))
expect EMathError
do ShowMessage("Div Zero");
end;
и что же тут не так??
Reindeer Moss Eater (2002-05-31 15:12:00) [1]А получится если разделить целый ноль на целый ноль
Игорь Шевченко (2002-05-31 14:54:00) [2]Reindeer Moss Eater (31.05.02 14:43)
А в каком получится ? :-)
Reindeer Moss Eater (2002-05-31 14:43:00) [3]EInvalidOp в этом примере не получится.
Игорь Шевченко (2002-05-31 14:28:00) [4]Дабы прекратить дебаты о типах Exceptions
function ForceFixedZeroDivide (K, M : Integer) : INteger;
begin
K := (M DIV 2) - K;
Result := M DIV K;
end;
function ForceFloatZeroDivide (K, M : Extended) : Extended;
begin
K := (M / 2) - K;
Result := M / K;
end;
procedure TForm1.Button1Click(Sender: TObject);
var K : Integer;
M : Integer;
begin
K := 5;
M := K * 2;
ForceFixedZeroDivide (K, M);
end;
procedure TForm1.Button2Click(Sender: TObject);
var K : Extended;
M : Extended;
begin
K := 5;
M := K * 2;
ForceFloatZeroDivide (K, M);
end;
Попробуйте. D5/WinNt
Reindeer Moss Eater (2002-05-31 14:25:00) [5]Кроме перечисленных выше классов может быть еще и
EInvalidOp при делении на ноль
Anatoly Podgoretsky (2002-05-31 13:40:00) [6]Kaldr © (31.05.02 11:46)
Вообще если хочешь, что бы это заработало и лучше для всех арифметических ошибок, то можно написать так
4:
try
label1.Caption:=FloatToStr(StrToFloat(f)/StrToFloat(Label1.Caption))
execpt
ShowMessage("Math error");
end;
Anatoly Podgoretsky (2002-05-31 13:27:00) [7]А ты не думаешь, что ее не наступит по причине отсутствия самого деления, вообще то этот код одна сплошная ошибка
Freezer (2002-05-31 13:10:00) [8]Согласен с Song, конечно же ошибка другого класса, но смысл вопроса был не в этом... В приведенном коде Kaldr куча синтаксических ошибок! expect -> except, например...
try
{ ... }
except
on E: Exception do
Application.HandleException(E);
end;
Игорь Шевченко (2002-05-31 13:07:00) [9]Song © (31.05.02 13:01)
EIntError = class(EExternal);
EDivByZero = class(EIntError);
EZeroDivide = class(EMathError);
:-))
Anatoly Podgoretsky (2002-05-31 13:04:00) [10]Никогда ошибка деления на ноль не наступит
if StrToFloat(Label1.Caption )<>0then
label1.Caption:=FloatToStr(StrToFloat(f)/StrToFloat(Label1.Caption))
Song (2002-05-31 13:01:00) [11]Do надо писать если написано on
А при делении на ноль возникает AV вида не EMathError...
Freezer (2002-05-31 12:58:00) [12]try
{ ... }
except
on E: EMathError do
ShowMessage("Division by zero!")
else
raise
end;
Cossys (2002-05-31 12:00:00) [13]1. do ShowMessage("Div Zero");- do уберите
2. Честно говоря, никогда exceptна EMathError, EIOError не проверяю, просто пишите -
expect
ShowMessage("Div Zero");
end;
Ведь тут другая ошибка и не проглядывается