...
kV = 1;AnsiString tM=kV;
for(;;)
{
try
{
kV=InputBox("Запрос...", "Введите номер квартала (1-4):", tM);
if((StrToInt(kV)<5)&&(StrToInt(kV)>0))break;
continue;
}
catch (EConvertError* exc)
{
continue;
}
}
...
В данном примере производится ввод номера квартала при помощи диалогового окна, которое возвращает строку введеную пользователем. Программа отрабатывает нормально, если пользователь ввел значения 1 - 4, если же были введены не числовые символы, а строковые символы то происходит "исключительная ситуация" во время приобразования строки в число при помощи функции StrToInt(). Данная ситуация вызывает исключения типа EConvertError - ошибка преобразования данных. В блоке catch производится возврат в начало бесконечного цикла и операция ввода повторяется заново и это продолжается до тех пор пока пользователь не введет нужное значение.
void open_file(void)
{
FILE *fp;
char *fname = "MY_DOC.TXT";
fp = fopen(fname, "r");
if(fp==NULL)
throw file_err(fname, "r");
...
}
class file_err
{
//объявление элеменотов класса
public:
char file [255];
char mode [10];
f_error(char *f, char *m)
{
strcpy(file, f);
strcpy(mode, m);
}
}
try
{
open_file();//функция открытия файла
run_program();//Функция запуска алгоритма
}
catch (file_err f_error)
{
close_file();
printf("Ошибка при открытии файла %s в режиме %s.",f_error.file, f_error.mode);
exit(1);// выход из программы
}
В этом примере в блоке инструкции try выполняются две функции: открытие файла, запуск алгоритма. Если при выполнение функции open_file произойдет ошибка открытия файла, то управление передается инструкции throw, которая вызывает конструкцию file_err для создания объкта исключения. Объкт исключения file_err будетзатем должным образом обработан в соответствующем блоке инструкции catch, после чего выполнение программы завершится.