Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 15.03.2009, 21:32   #1
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
Радость Вопрос по исключениям в С++ Builder 6.0

Здравствуйте программисты!Недавно начал изучать с++. Столкнулся с некой трудностью в С++ Builder 6.0. Проблемма такая. Я сбросил на форму два поля Edit и одну кнопку батон. В одно, и второе поле Edit, пользователь должен ввести любые 2 действительные числа типа float. Приложение должно разделить их одно на другое. При этом возможен ряд ошибок. Пользователь может ввести в окно символы, а не числа или слишком большое число, и при нажатии на кнопку баттон, программа должна выдать ошибку. Вопрос сотоит в том, что я использую исключения в блоках try......catch. Я нажимаю на кнопку баттон и в процедуру пихаю такой код:

Код:
float A;
try
{
A = StrToFloat(Edit1->Text) / StrToFloat(Edit2->Text);
}
catch(EConvertError&)
{
Application->MessageBox("Вы ввели ошибочное число","Повторите ввод",MB_OK);
}
catch (EZeroDivide&)
{
Application->MessageBox("Вы ввели нуль",
"Повторите ввод",MB_OK);
}
catch(EOverflow&)
 {
Application->MessageBox("Переполнение",
"Ошибка вычислений",MB_OK);
if (StrToFloat(Edit1->Text) * StrToFloat(Edit2->Text) >=0)
A = 3.4E38;
else A = -3.4E38;
}
При запуске приложения, и вводе не чисел а чего-нибудь другого, меня выбрасывает с приложения, выдаёт ошибку английскими буквами. но когда я снова нажимаю клавишу F9, ошибка исключения срабатывает.
Объясните пожалуйста, если кто знает, куда мне нужно пихать этот код, чтоб при неправильных вводах, выдавало ошибку, только не выбрасывало с среды С++, и не приходилось повторно запускать программу. Заранне благодарен вам, кто мне поможет в этом вопросе.

Модератор: тег CODE

Последний раз редактировалось MaTBeu; 15.03.2009 в 23:00.
prikolist вне форума
Старый 15.03.2009, 22:06   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Запускайте скомпилированную прогу не по F9, а из проводника или в настройках покопайтесь. Там это дело где-то отключается
pu4koff вне форума
Старый 15.03.2009, 22:17   #3
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

Проблемма такая. Когда ввожу в 2 поля Edit какой-то текст нажимаю на зелёный треугольник, или ран или F9, тоже самое выбрасывает с приложения, запускаю программу любым образом, выдаёт моё исключение
prikolist вне форума
Старый 15.03.2009, 23:02   #4
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Проверку на пустоту поля поставьте.
MaTBeu вне форума
Старый 15.03.2009, 23:12   #5
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

Спасибо за ответ, но я новичок в С++, недавно только начал изучать. Подскажите пожалуйста как поставить проверку на пустоту поля, и что эта проверка даёт. Ответьте пожалуйста. Заранне благодарен.
prikolist вне форума
Старый 15.03.2009, 23:51   #6
Vitek-pm
Пользователь
 
Регистрация: 17.02.2009
Сообщений: 56
По умолчанию

Лично бы я не стал обрабатывать кучу ошибок отдельно, а сделал бы так:
Код:
try
{
A = StrToFloat(Edit1->Text) / StrToFloat(Edit2->Text);
}
catch(...) //при любой ошибке
{
ShowMessage("Ошибка ввода");
return;     //завершаем работу процедуры
}
кстати, может быть, ошибка из-за отсутсвия return в catch'е, то есть ошибку то выводишь, а выполнение функции продолжаешь.

З.Ы. попробуй ещё отключить Tools->Debugger Options->Language Exception->Stop on Delphi Exceptions и Stop on C++ Exceptions. Должно помочь!

Последний раз редактировалось Vitek-pm; 15.03.2009 в 23:55.
Vitek-pm вне форума
Старый 16.03.2009, 12:52   #7
prikolist
Форумчанин
 
Аватар для prikolist
 
Регистрация: 18.06.2008
Сообщений: 350
По умолчанию

Спасибо, действительно, после выключения галочек Tools->Debugger Options->Language Exception->Stop on Delphi Exceptions и Stop on C++ Exceptions всё стало рботать. Иногда даже мелочь может всё испортить. Спасибо автору.
prikolist вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по C++ Builder (изменение размера StringGrid) Sad_SmiliK Помощь студентам 2 11.03.2009 18:20
Builder 6.0 prankish_cat Общие вопросы C/C++ 0 01.02.2009 16:45
вопрос по сокетам и общение как в ICQ.Сложный вопрос... Руслантус Общие вопросы C/C++ 2 12.08.2008 21:10
Вопрос по C++ Builder 6 Руслантус C++ Builder 6 19.12.2007 21:36
С++ Builder простой вопрос POPOV C++ Builder 4 17.11.2007 22:40