Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Исключ. ситуац. [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;

Ведь тут другая ошибка и не проглядывается


Наверх

Титульная страница Поиск, карта сайта Написать письмо