Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как обойти ошибку

305
05 марта 2003 года
Kashuk
385 / / 21.02.2003
Народ нужен хелп.

В своей программе я столкнулся с одной штукой.
По разным причинам(причины не случайные) программа выдаёт ошибку и останавливается,
можно ли зделать что то на подобии такого:

//Объявляю с верху
Если Ошибка то GoTo 1:

//тело прогреаммы
......
......
......
......


1:
Если ошибка == 1 то стоп
Если ошибка == 2 то повторить операцию
Если ошибка == 3 то вывести что то
и так далее
317
05 марта 2003 года
Relax
573 / / 20.09.2000
можно... другими словами тебе нужно сделат свой обработчик исключительных ситуаций (exception). для этого в С++ есть оператор try{}catch{}
Пример его использования есть в любом билдеровском проекте в главном модуле. Тебе нужно объявить свои классы исключений, соответствующие определенной ошибке...
305
05 марта 2003 года
Kashuk
385 / / 21.02.2003
Цитата:
Originally posted by Relax
можно... другими словами тебе нужно сделат свой обработчик исключительных ситуаций (exception). для этого в С++ есть оператор try{}catch{}
Пример его использования есть в любом билдеровском проекте в главном модуле. Тебе нужно объявить свои классы исключений, соответствующие определенной ошибке...



Попрошу, если не трудно, не мог бы ты Relax написать какойто пример, бо дело в чём, я только перехожу на билдер, и мне немного трудновато, но всёравно ,большое спасибо за совет, попробую разобратся.

317
05 марта 2003 года
Relax
573 / / 20.09.2000
я, к сожалению, с исключениями не так много работал как хотелось бы - так в основном теория из университетского курса :), но постараюсь чего нибудь сваять...
а ошибки какого типа?
305
05 марта 2003 года
Kashuk
385 / / 21.02.2003
305
05 марта 2003 года
Kashuk
385 / / 21.02.2003
Цитата:
Originally posted by Relax
я, к сожалению, с исключениями не так много работал как хотелось бы - так в основном теория из университетского курса :), но постараюсь чего нибудь сваять...
а ошибки какого типа?



Ошибки разные:

Читаю с реестра ключ как двоичный, а какойто умник его записал как строковой(записал в реестр), выдаёт ошибку, ну вот такого типа, или вот к примеру на бейсике я писал так(при работе с файлом по сети)

IF Erorr GoTo 1:
REM Тело программы
.......
.......
1:
REM К примеру
IF Err = 53 THEN PRINT "Нет диска"
IF Err = 12 THEN PRINT "Нет доступа"
........
И так далее.
Но это помоему можно обойти, делая проверку при открытия файла, этот пример я взял чисто для наглядности.

450
05 марта 2003 года
suffer
64 / / 20.03.2000
IF Erorr GoTo 1:
REM Тело программы
.......
.......
1:
REM К примеру
IF Err = 53 THEN PRINT "Нет диска"
IF Err = 12 THEN PRINT "Нет доступа"

try
{
....
....
switch(Err)
{
case 53: throw Exception("Ошибка 53");break;
case 12: throw Exception("Ошибка 12");break;
...
case N: throw Exception("Ошибка N");break;
default: throw Exception("Неопознанная ошибка");
}
}
catch(Exception &e)
{
//вывод e.Message
}
305
05 марта 2003 года
Kashuk
385 / / 21.02.2003
Цитата:
Originally posted by suffer

try
{
....
....
switch(Err)
{
case 53: throw Exception("Ошибка 53");break;
case 12: throw Exception("Ошибка 12");break;
...
case N: throw Exception("Ошибка N");break;
default: throw Exception("Неопознанная ошибка");
}
}
catch(Exception &e)
{
//вывод e.Message
}



Спасибо suffer, прийду домой с работы то попробую

317
05 марта 2003 года
Relax
573 / / 20.09.2000
токо switch не нужен... просто надо исключение кидать и все
1.9K
05 марта 2003 года
XilefNori
34 / / 28.02.2003
Цитата:
Originally posted by Relax
токо switch не нужен... просто надо исключение кидать и все



Что значит switch не нужен? Как тогда определять какое исключение кидать?

362
06 марта 2003 года
_kolyan
339 / / 03.12.2002
Цитата:
Originally posted by XilefNori


Что значит switch не нужен? Как тогда определять какое исключение кидать?



Я делаю что-то вроде этого и обычно хватает:

AnsiString err_strings[] =
{
"Ошибка 1",
"Ошибка 2",
"Ошибка 3"
}

try
{
//код который может вызвать ошибку
if(условие ошибки) throw 1;
//код который может вызвать ошибку
if(условие ошибки) throw 2;
//код который может вызвать ошибку
if(условие ошибки) throw 3;
......
return true;
}
catch(int err_code)
{
MessageBox(err_strings[err_code]);
return false;
}

362
06 марта 2003 года
_kolyan
339 / / 03.12.2002
Можно еще предусмотреть обработчи VCL-исколючением и перед интовым catch написать

catch(Exception &e)
{
char str[256];
wsprintf(str, "Исключение VCL - %s\nСообщение об ошибке - %s", AnsiString(e.ClassName()), e.Message);
MessageBox(str);
}
317
06 марта 2003 года
Relax
573 / / 20.09.2000
_kolyan написал как :) - это я и имел ввиду... ошибку надо обрабатывать и кидать исключение сразу после ее появления, а не в самом конце программного модуля...
450
06 марта 2003 года
suffer
64 / / 20.03.2000
Так сказать, в этом и есть смысл исключений. Я просто писал по аналогии с приведенным куском некоторого кода :cool:
317
06 марта 2003 года
Relax
573 / / 20.09.2000
ну, извини, тогда.... :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог