Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
bgm123
40 / 40 / 27
Регистрация: 29.01.2013
Сообщений: 277
1

Не перехватывается исключений

16.07.2013, 20:39. Просмотров 524. Ответов 13

C++
1
2
3
4
5
6
7
8
int a;
 
try{
cin >> a;
cout << a / 0 << endl;
}catch(...){
cout << "err" << endl./
}
Добавлено через 11 секунд
Почему?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2013, 20:39
Ответы с готовыми решениями:

почему не перехватывается исключение типа double
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;cstring&gt; using namespace...

Обработка исключений с пмощью структурированной обработки исключений
Есть функция, которая определенным образом работает с файлами,но при работе с...

Обработка исключений
Надо отловить ввод данных некорректного типа. Объясните пожалуйста на...

перехват исключений
Ввести два числа. Меньшее заменить полсумой, а большее - удвоенным...

Обработка исключений
Проблема. В main создаю объект класса MAS int или string. Нужно, что бы когда...

13
Valentina
69 / 69 / 13
Регистрация: 13.05.2012
Сообщений: 130
16.07.2013, 20:46 2
Деление на 0 — это undefined behavior, а не исключительная ситуация. Его нельзя обработать, его можно только предотвратить.
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
#include <stdexcept>
#include <string>
#include <iostream>
#include <ostream>
 
int checked_divide(int numerator, int denominator)
{
  if (0 == denominator) throw std::domain_error("Division by zero");
  return numerator / denominator;
}
 
int main()
{
  try
  {
    int p = 0;
    int i = checked_divide(5, p);
  }
  catch (const std::exception& e)
  {
    std::cout << "Error: " << e.what() << std::endl;
  }
  system("pause");
}
0
bgm123
40 / 40 / 27
Регистрация: 29.01.2013
Сообщений: 277
16.07.2013, 20:49  [ТС] 3
Цитата Сообщение от Valentina Посмотреть сообщение
это undefined behavio
Можете поподробнее объяснить?
0
Valentina
69 / 69 / 13
Регистрация: 13.05.2012
Сообщений: 130
16.07.2013, 20:58 4
Неопределенное поведение. Undefined behavior означает, что стандарт не накладывает каких-либо ограничений. Может случиться все, что угодно.
1
bgm123
40 / 40 / 27
Регистрация: 29.01.2013
Сообщений: 277
16.07.2013, 21:00  [ТС] 5
А что тогда такое исключительная ситуация?
0
Valentina
69 / 69 / 13
Регистрация: 13.05.2012
Сообщений: 130
16.07.2013, 21:29 6
Липпман пишет
Исключение – это аномальное поведение во время выполнения, которое программа может обнаружить, например: деление на 0, выход за границы массива или истощение свободной памяти.
Хотя по стандарту С++ деление на ноль не обрабатывается механизмом обработки исключений.
0
bgm123
40 / 40 / 27
Регистрация: 29.01.2013
Сообщений: 277
16.07.2013, 21:43  [ТС] 7
Вообщем, если я правильно понял, то, что деление на ноль не обрабатывается - это БАГ?
0
Valentina
69 / 69 / 13
Регистрация: 13.05.2012
Сообщений: 130
16.07.2013, 21:54 8
нашла как можна обработать исключение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream>
#include<windows.h>
 
int main(){
    int a,b,c;
    std::cin>>a>>b;
    __try {
        c=a/b;
        std::cout<<c;
    }__except (EXCEPTION_EXECUTE_HANDLER) {
        std::cout<<"exception\n";
    }
    system("pause");
    return 0;
}
1
bgm123
40 / 40 / 27
Регистрация: 29.01.2013
Сообщений: 277
16.07.2013, 21:59  [ТС] 9
Ну это же уже Windows средства. Значит, всё-таки, баг?
0
Croessmah
++Ͻ
14740 / 8422 / 1597
Регистрация: 27.09.2012
Сообщений: 20,714
Записей в блоге: 2
Завершенные тесты: 1
16.07.2013, 21:59 10
Цитата Сообщение от bgm123 Посмотреть сообщение
на ноль не обрабатывается - это БАГ?
БАГ, но это БАГ вашей программы, а не что-то другое
0
Valentina
69 / 69 / 13
Регистрация: 13.05.2012
Сообщений: 130
16.07.2013, 22:00 11
Цитата Сообщение от bgm123 Посмотреть сообщение
Ну это же уже Windows средства. Значит, всё-таки, баг?
да это баг
1
Bend3r
149 / 136 / 35
Регистрация: 29.07.2012
Сообщений: 709
16.07.2013, 22:00 12
Просто сделайте if да и все.
1
bgm123
40 / 40 / 27
Регистрация: 29.01.2013
Сообщений: 277
16.07.2013, 22:01  [ТС] 13
Цитата Сообщение от Croessmah Посмотреть сообщение
БАГ, но это БАГ вашей программы, а не что-то другое
Ну насколько я понял механизм обработки исклчюений предназначен для контроля программных исключений в том числе? Не так?

Добавлено через 31 секунду
Цитата Сообщение от Bend3r Посмотреть сообщение
Просто сделайте if да и все
хорошая идея)
0
Croessmah
++Ͻ
14740 / 8422 / 1597
Регистрация: 27.09.2012
Сообщений: 20,714
Записей в блоге: 2
Завершенные тесты: 1
16.07.2013, 22:09 14
http://www.jdl.co.uk/briefings/divByZeroInCpp.html
1
16.07.2013, 22:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2013, 22:09

Обработка исключений
Есть вопрос по заданию. С клавиатуры вводится номер ошибочной ситуации. В...

Обработка исключений
Программа должна содержать блоки try, catch, точку throw. Задание: Ввод...

обработка исключений
Здравствуйте. В следующем коде, при запуске throw выдает ошибку &quot;Exception...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru