:: Меню ::

Головна
Передмова
СЕРЕДОВИЩЕ РОЗРОБКИ C++ BUILDER
Початок роботи
Перший проект
ПРАКТИКУМ ПРОГРАМУВАННЯ
Графіка
Мультимедіа
Бази даних
Компонент програміста
Консольне застосування
Довідкова система
Створення настановного диска
Приклади програм
C++ Builder — короткий довідник
Книга для гостей
Контакти
Добавити у вибране

:: Друзі ::

 
МБР красноярск Индивидуалки размещают свои анкеты у нас, потому, что именно здесь можно заработать девушкам, не выходя из дома. Многие из проституток готовы встретить Вас у себя в апартаментах. Преимущества«Где секс в Красноярске? »

:: Лічильники ::

=

 

 

 

 

 

Помилки часу виконання



Під час роботи додатки можуть виникати помилки, які називаються помилками часу виконання (run time errors) або виключеннями (exceptions). В більшості випадків причинами виключень є невірні початкові дані.

Наприклад, якщо під час роботи програми обчислення сили струму в полі Напругу ввести ю.5, тобто розділити цілу і дробову частину крапкою, то в результаті клацання на кнопці Обчислити на екрані з'явиться вікно з повідомленням про помилку (мал. 2.34).



Мал. 2.34. Приклад вікна з повідомленням про помилку часу виконання (програма запущена з Windows)


Причина виникнення помилки в наступному. У тексті програми дробова частина числа від цілої відділяється крапкою. При введенні даних в полі редагування користувач може відокремити дробову частину числа цілою крапкою або комою. Який з цих двох символів є правильним, залежить від налаштування Windows.

Якщо в налаштуванні Windows вказане, що роздільник цілої і дробової частин числа — кома (для Росії це стандартна установка), а користувач використовував крапку (ввів в поле Напругу (Edit1) рядок 10.5), то при виконанні інструкції

u = Strtofloat(Editl->text); 

виникне виключення, оскільки при вказаному налаштуванні Windows вміст поля редагування і, отже, аргумент функції Strtofloat не є зображенням дробового числа.

Якщо програма запущена з середовища розробки, то при виникненні виключення виконання програми припиняється і на екрані з'являється вікно з повідомленням про помилку і її тип. Як приклад на мал. 2.35 приведено вікно повідомлення про виникнення виключення, причина якого полягає в тому, що рядок, введений користувачем в полі редагування, не є дробовим числом.



Мал. 2.35. Приклад повідомлення про виникнення виключення (програма запущена з C++ Builder)


Після виникнення виключення і клацання на кнопці ОК у діалоговому вікні Debugger Exception Notification (мал. 2.35) виконання програми можна перервати або, не дивлячись на виниклу помилку, продовжити. Щоб перервати виконання програми, треба в меню Run вибрати команду Program Reset щоб продовжити — команду Step Over.

Обробку виключень бере на себе код, що автоматично додається у виконувану програму, який забезпечує, зокрема, і виведення інформаційного повідомлення. Разом з тим C++ Builder дає можливість програмі самій виконати обробку виключення.

Інструкція обробки виключення виглядає так:

try 
{ 
// тут інструкції, виконання яких може викликати виключення 
} 
catch ( Тип &е) 
{ 
// тут інструкції обробки виключення 
} 

де:

  • try — ключове слово, що позначає, що далі слідують інструкції, при виконанні яких можливе виникнення виключень, і що обробку цих виключень бере на себе програма;
  • catch — ключове слово, що позначає початок секції обробки виключення. Інструкції цієї секції будуть виконані, якщо в програмі виникне виключення вказаного типу.


Основною характеристикою виключення є його тип. У таблиці. 2.12 перераховані найбільш часто виникаючі виключення і вказані причини, які можуть привести до їх виникнення.

Таблиця 2.12. Типові виключення


Виключення

Виникає

Econverterror — помилка перетворення

При виконанні перетворення, якщо перетворювана величина не може бути приведена до необхідного типу. Найчастіше виникає при перетворенні рядка символів в число

Edivbyzero — цілочисельне ділення на нуль

При виконанні операції цілочисельного ділення, якщо дільник дорівнює нулю

Ezerodivide — ділення на нуль

При виконанні операції ділення над дробовими операндами, якщо дільник дорівнює нулю

Einouterror — помилка введення/виводу

При виконанні файлових операцій. Найбільш частою причиною є відсутність необхідного файлу або, у разі використання змінного диска, відсутність диска в накопичувачі


У програмі обчислення сили струму виключення можуть виникнути при виконанні перетворення рядків, введених в поля редагування, в числа і при обчисленні величини струму. Виключення Econverterror виникне, якщо користувач неправильно введе числа в поля редагування: наприклад, розділить цілу і дріб частині крапкою. Виключення Ezerodivide виникне, якщо користувач задасть величину опору рівної нулю. У лістингу 2.3 приведена функція обробки події Onclick на командній кнопці Обчислити. У функцію включені інструкції обробки виключень.

Лістинг 2.3. Обробка виключень

void __fastcall Tforml::buttonlclick(Tobject *Sender) 
{ 
float u;   // напруга 
float r;   // опір 
float i;   // струм 
// отримати дані з полів введення 
// можливе виключення — помилка перетворення рядка в число 
try 
{ 
u = Strtofloat(Editl->text); грам = Strtofloat(Edit2->text); 
} 
catch (Econverterror &e) 
( 
Showmessage("При введенні дробових чисел використовуйте кому."); 

return;
} 
// обчислити струм 
// можливе виключення — ділення на нуль 
try 
{
i = u/r; 
}  
catch (Ezerodivide &e) 
{ 
 Showmessage("Величина опору не має дорівнювати нулю"); 
Edit2->setfocus();   // курсор а поле Опір 
return; } 
// вивести результат в полі влучні 
Label4->caption =  "Струм : " + 
Floattostrf(i,ffgeneral,7,3); 

У приведеній функції для виведення повідомлень у разі виникнення виключень використана функція Showmessage яка виводить на екран вікно з текстом і командною кнопкою ОК. Інструкція виклику функції Showmessage виглядає так: Showmessage(Повідомлення);

Де повідомлення — строкова константа (текст, який треба вивести). На мал. 2.36 приведений вид вікна повідомлення, отриманого в результаті виконання інструкції: Showmessage("Величина опору не має дорівнювати нулю.");



Мал. 2.36. Повідомлення, виведене функцією Showmessage


Слід звернути увагу на те, що в заголовку вікна повідомлення, що виводиться функцією Showmessage указується назва додатку. Назва додатку задається на вкладці Application вікна Project Options. Якщо назва додатку не задана, то в заголовку буде ім'я виконуваного файлу.

Для виведення повідомлень можна використовувати функцію Messagedig. Функція Messagedig дозволяє помістити у вікно з повідомленням один із стандартних значків, наприклад "Увага", задати кількість і тип командних кнопок і визначити, яку з кнопок натиснув користувач. На мал. 2.37 приведено вікно, виведене в результаті виконання інструкції

Messagedig("Файл c:\xtemp\\test.txt буде видалений.", 
mtwarning, Tmsgdlgbuttons() « mbok « mbcancel, 0); 



Мал. 2.37. Приклад вікна повідомлення


Значення функції Messagedig — число, перевіривши значення якого можна визначити, вибором якої командної кнопки був завершений діалог. У загальному вигляді звернення до функції Messagedig виглядає так:

Вибор:= Messagedig(Повідомлення, Тип, Кнопки, Контекстсправки)

де:

  • повідомлення — текст повідомлення;
  • Тип — тип повідомлення. Повідомлення може бути інформаційним, застережливим або повідомленням про критичну помилку. Кожному типу повідомлення відповідає певний значок. Тип повідомлення задається іменованою константою (таблиця. 2.13);
  • кнопки — кнопки, що відображаються у вікні повідомлення. Задаються операцією включення в множину елементів — констант (таблиця. 2.14).
  • контекстсправки — параметр, який визначає розділ довідкової інформації, який з'явиться на екрані, якщо користувач натисне клавішу <F1>. Якщо виведення довідкової інформації не передбачене, то значення параметра має дорівнювати нулю.


Таблиця 2.13. Константи, що визначають тип повідомлення


Константа

Тип повідомлення

Значок

mtwarning

Увага



mterror

Помилка



mtlnformation

Інформація



mtconfirmation

Підтвердження



Mtcustom

Звичайне

Без значка


Таблиця 2.14. Константи, що визначають кнопки у вікні повідомлення


Константа

Кнопка

Константа

Кнопка

mbyes

Yes

mbabort

Abort

mbno

No

mbretry

Retry

mbok

OK

mblgnore

Ignore

mbcancel

Cancel

mball

All

mbhelp

Help
   


Окрім приведених констант можна використовувати константи mbokcancel, mbyesnocancel і mbabortretryignore. Ці константи визначають найбільш часто використовувані в діалогових вікнах комбінації командних кнопок.

Значення, повертане функцією Messagedig (таблиця. 2.15)дозволяє визначити, яка з командних кнопок була натиснута користувачем.

Таблиця 2.15. Значення функції Messagedlg


Значення функції Messagedlg

Діалог завершений натисненням кнопки

mr Abort

Abort

mryes

Yes

mrok

Ok

mrretry

Retry

mrno

No

mrcancel

Cancel

mrlgnore

Ignore

mrall

All

 


click | Jak drzwi wewnetrzne biale z pieknymi bewelami Stolczer producent высокооплачиваемая работа для девушек
x

:: Наша кнопка ::

Отримати код:

Підтримайте наш сайт і розмістіть нашу кнопку на своєму ресурсі.


:: Реклама ::


:: Посилання ::

-


 

 

 


Copyright by Zvircom © 2009