Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12

Обработка исключительных ситуаций в консольном приложении

03.07.2012, 13:09. Показов 2130. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добррого времени суток.
Условие токово.Написать программу нахождения частного 2-х целых чисел. Организовать обработку исключительных ситуаций.
Я написал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#pragma hdrstop
#pragma argsused
 
#include <tchar.h>
#include <stdio.h>
#include <windows.h>
#include <iostream.h>
 
int _tmain(int argc, _TCHAR* argv[])
{
    system("chcp 1251");
    system("cls");
    int a,b,c;
    cout << "Введите 2 числа через пробел: "; cin >> a >> b; cout << endl;
    try{
        c=a%b;
        cout<<"Частное от деления: "<<c<<endl;
    }catch(...){
        cout<< "Возникла ошибка" << endl;
    }
    system("pause");
    return 0;
}
Но когда происходит деление на 0 мне не пишет "Возникла ошибка" а просто программа зависает.
Как я понимаю в catch нужно указать не (...), а что - то другое.?
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.07.2012, 13:09
Ответы с готовыми решениями:

Обработка исключительных ситуаций на С++
Добрый вечер) Можете объяснить, как правильно будет оформить блок cath() Вот код программы: int j; j=2; AnsiString Marka; ...

Обработка исключительных ситуаций
Имеется MaskEdit с форматом ввода !99/99/00;1;_ т.е. __.__.__ ввод даты рождения. Т.е. если пользователь введет 11.22.33 то все будет...

Обработка исключительных ситуаций
catch(Exception &amp;ex){ Application-&gt;MessageBoxA(ex.Message.c_str(),&quot;Ошибка1&quot;); } catch(char *msg){ ...

19
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
03.07.2012, 13:37
Вот маленький примерчик круговой защиты:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int _matherr( struct _exception *a )
{
    throw 0;
}
 
bool calc_U_equation( double *U, double x, double y, double z ) {
 
    double _U;
 
    try {
        __try {
            _U = - pow( ( pow( y, 2 ) + 4 * pow( x, 2 ) / 3 ), 0.5 ) +
                           ( sin( pow( x, 3 ) - y ) - fabs( x * y ) ) / x * z;
        }
        __except ( EXCEPTION_EXECUTE_HANDLER ) {
            throw 0;
        }
    }
    catch ( ... ) {
        return false;
    }
    *U = _U;
    return true;
}
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
03.07.2012, 13:38
C++
1
2
3
4
catch (exception &e)
{
  cerr<<"exception caught: "<<e.what()<<endl;
}
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
03.07.2012, 13:45  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
C++
1
2
3
4
catch (exception &e)
{
  cerr<<"exception caught: "<<e.what()<<endl;
}

И если добавить
C++
1
cerr<<"exception caught: "<<e.what()<<endl;
Тоже самое.
Приложение просто завершаеться.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
03.07.2012, 15:18
дык, вопрос был в том, чтобы не зависала, коль завершается, значит, не зависает
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
03.07.2012, 15:20  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
дык, вопрос был в том, чтобы не зависала, коль завершается, значит, не зависает
Всмысле завершаеться с ошибкой и при этом зависает
Извиняюсь за то, что ввёл в заблуждение
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
04.07.2012, 00:42
А если мыслить ШирШе?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int _tmain(int argc, _TCHAR* argv[])
{
system("chcp 1251");
system("cls");
 
    int a,b,c;
    cout << "Введите 2 числа через пробел: "; cin >> a >> b; cout << endl;
 
     if (b==0)  cerr<< "Возникла ошибка" << endl;
     else 
       {
        c=a%b;
        cout<<"Частное от деления: "<<c<<endl;
       }
 
system("pause");
return 0;
}
А вообще код ТС у меня и так нормально отрабатывает ...
Кстати такое(деление 0) не проканает на VC++.
Миниатюры
Обработка исключительных ситуаций в консольном приложении  
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
04.07.2012, 20:35  [ТС]
Avazart,
Я же написал задача заключалась в том что сделать обработку исключительных ситуаций.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
04.07.2012, 20:37
А чем это не обработка исключительных ситуаций?
мыслить ШирШе?
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
04.07.2012, 20:53
Avazart, это не шибко эффективно.
Обычно требуется рассчитывать несколько большие объемы данных, чем один остаток от деления, используется значительно больше переменных и, следовательно, появляется множество избыточных проверок. Да и знаменатели зачастую составные, придется их отдельно считать, вводя избыточные переменные, и проверять.
1
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
04.07.2012, 21:05
Если формула большая, то её все равно разбивают на части.
Блоки try/catch куда более грамосткие, да и записывать все вычисления в один блок try/catch тоже не хорошо.

Да и где-то уже писалось что отлавливание /0 получется только если использовать Builder так как это исключение на уровне процессора (если не ошибаюсь)
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
04.07.2012, 21:11  [ТС]
Цитата Сообщение от BRcr Посмотреть сообщение
это не шибко эффективно.
Да да
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
04.07.2012, 21:17
Я об этом Try Catch не ловит ошибку

Цитата Сообщение от Maluda Посмотреть сообщение
Потому что деление на ноль - это ошибка, которая генерируется на уровне операционной системы и у разных компиляторов она обрабатывается по разному

https://www.cyberforum.ru/redi... QwJTI1Qjk=
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
05.07.2012, 01:32
Avazart, ну, вот зачем эти глупости? Ссылок накидал левых, лишь бы поспорить, ей богу. Речь в указанной теме шла о выдаче окошка с ошибкой билдером при возникновении исключительной ситуации в отлаживаемой программе и в отличие от него о невыдаче оного в MS VS. Всего лишь разница в поведении отладчиков. Исключительная ситуация возникает и обрабатывается в любом случае, механизмы ее генерации и обработки заложены в ядре операционки, унифицированы и не зависят от конкретного компилятора, все остальные прибамбасы отладчиков - просто мишура.
А насчет громоздкости... что удобнее - отдельная проверка пятнадцати знаменателей или один try-catch? Прошу считать это риторикой, ибо все равно каждый для себя решает в таком случае сам, что ему больше по душе.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
05.07.2012, 01:41
1. Версия Builder-a ТС не ловит /0 с помощью try/catch, а значит скорее всего стоит попробывать использовать отлов как указано по ссылке - к тому я её и привел.
2.
Отдельная проверка пятнадцати знаменателей или один try-catch?
А как вы определите в каком именно месте возникла ошибка ? Я лишь показал альтернативу для данной задачи.
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
05.07.2012, 01:48
Цитата Сообщение от Avazart Посмотреть сообщение
1. Версия Builder-a ТС не ловит /0 с помощью try/catch, а значит скорее всего стоит попробывать использовать отлов как указано по ссылке - к тому я её и привел.
try - catch в принципе деление на ноль не ловит. Его ловит __try - __except ( EXCEPTION_EXECUTE_HANDLER )
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
05.07.2012, 01:51
try - catch в принципе деление на ноль не ловит. Его ловит __try - __except ( EXCEPTION_EXECUTE_HANDLER )
Ну, а я к чему ссылку кидал?
Но в Builder-е все таки ловит покрайней мере в 2009, а вот у ТС похоже старый Builder -который не ловит.
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
05.07.2012, 01:59
Не знаю... у меня в RAD XE только __except это ловит - catch не хочет.
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
05.07.2012, 11:32  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
__try - __except
Синтаксис точно такой же как и у try catch ?
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
05.07.2012, 16:44
Такой же почти. Смотри второй пост в этой теме, а также __try и __except.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.07.2012, 16:44
Помогаю со студенческими работами здесь

Обработка исключительных ситуаций
Добрый день. Написал проверку на ввод в массив вещественных чисел: int i,j; float A; bool flag=false; for(i=1;i&lt;n;i++) ...

Обработка исключительных ситуаций в C++ Builder 2010
собственно сабж, подскажите как?

Обработчик исключительных ситуаций
Проверьте, плиз, что не так. void __fastcall TForm1::Button1Click(TObject *Sender) { float a1; try { ...

Перехват исключительных ситуаций
Запрограммировать программу, которая демонстрирует генерирования исключительных ситуаций, через создание класса Error, что перехватывает...

Обработка исключительных ситуаций
Помогите пожалуйста! задачка вроде бы не сложная по C#, но я на ней затормозила:( Нужно оптимизировать задачу, включив в нее обработку...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru