Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Dady
2 / 2 / 0
Регистрация: 20.03.2012
Сообщений: 53
#1

Обработка сиситемного исключения - C++

22.06.2012, 17:57. Просмотров 865. Ответов 4
Метки нет (Все метки)

Друзья как мне переделать код, чтобы была обработка сиситемного исключения? Нужно ещё кроме деления на 0, использовать другие исключения.

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
25
26
27
28
29
30
31
32
33
void main()
{ setlocale(LC_ALL,"Russian");
  float a,b,y;
  int cw = _controlfp(0, 0); //получить управляющее слово, заданное по умолчанию
  //разрешить обработку исключений с плавающей точкой
  cw &=~(EM_OVERFLOW | EM_UNDERFLOW | EM_INEXACT | EM_ZERODIVIDE | EM_DENORMAL);
  _controlfp(cw, _MCW_EM);   //установить новое управляющее слово
  //теперь можно обрабатывать исключения
  //EXCEPTION_FLT_OVERFLOW – при выполнении операции с плавающей точкой произошло переполнение;
  //EXCEPTION_FLT_UNDERFLOW – результат операции с плавающей точкой является числом, которое меньше минимально возможного числа с плавающей точкой;
  //EXCEPTION_FLT_INEXACT_RESULT – результат операции с плавающей точкой не может быть точно представлен десятичной дробью;
  //EXCEPTION_FLT_DIVIDE_BY_ZERO – попытка деления на ноль в операции с плавающей точкой;
  //EXCEPTION_FLT_DENORMAL_OPERAND – один из операндов с плавающей точкой является ненормализованным;
  __try
  {
        printf("Введите a:\n");
        scanf("%f",&a);
        printf("Введите b:\n");
        scanf("%f",&b);
        y=a/b;
        printf("a/b=%f\n",y);
    
                    //ошибка, деление на 0
  }
  __except(EXCEPTION_EXECUTE_HANDLER)
  {
    DWORD  ec = GetExceptionCode();  //получаем код исключения
    if (ec == EXCEPTION_FLT_DIVIDE_BY_ZERO)
      cout << "Exception float divide by zero." << endl;
    else
      cout << "Some other exception." << endl;
  }system("Pause");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.06.2012, 17:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обработка сиситемного исключения (C++):

Обработка исключения - C++
Доброго времени суток, ув. программисты С++. Суть моей проблемы в том, что мне надо сделать некую обработку исключения. Задание...

Обработка исключения на русские буквы (try/catch) - C++
Доброго времени суток. Хотелось бы узнать как обработать исключение на русские буквы через try/catch (желательно кодом) Заранее спасибо

Выход за пределы массива, обработка исключения - C++
Есть такой код, когда я вызываю функцию на вывод массив еще не инициализирован, и я хочу чтобы у меня отлавливалась ошибка, но он заходит в...

Проверка входных данных: вызов и обработка исключения - C++
Всем привет. Не могу разобраться с проверкой входных данных. Нужно чтобы если я ввел какой либо символ вместо числа возбуждалось...

Конвертация wchar_t в число целого типа. Обработка исключения - C++
Конвертирую считываемые данные с Экселя в число типа int,для дальнейшей проверки вхождения в массив. buff содержит значение 12345qwe ...

Задать функцию которая возвращает частное деление двух чисел (обработка ошибок - через исключения) - C++
Ребят,срочно нужнатваша помощ.Задать функцию,которая возвращает частное деление двух чисел.Обработку ошибок реализовать через...

4
cppGhost
32 / 30 / 1
Регистрация: 21.06.2012
Сообщений: 91
22.06.2012, 18:21 #2
если я ничего не путаю, то использовать try/catch и _try/_catch одновременно нельзя. у них много отличий и служат они для разных целей. Попробовал
C++
1
2
3
4
5
6
7
8
9
10
11
try
    {
        _try
        {
 
        }       
    }
    catch(...)
    {
 
    }
вот ошибка "error C2713: Only one form of exception handling permitted per function"
0
Dady
2 / 2 / 0
Регистрация: 20.03.2012
Сообщений: 53
22.06.2012, 18:26  [ТС] #3
Цитата Сообщение от cppGhost Посмотреть сообщение
использовать try/catch и _try/_catch одновременно нельзя
А где я использую catch?
0
cppGhost
32 / 30 / 1
Регистрация: 21.06.2012
Сообщений: 91
22.06.2012, 18:38 #4
Значит я не понял вопрос. Вы сказали
Нужно ещё кроме деления на 0, использовать другие исключения
Под другими я понял именно исключения c++, а не глянул в код =)

вот тут кое-что есть
0
Андрей\
3 / 3 / 0
Регистрация: 13.12.2011
Сообщений: 22
23.06.2012, 02:45 #5
Доброе время суток. Как мне кажется после генерации исключения стоит продолжить ветвление

C++
1
2
3
4
5
6
if (ec == EXCEPTION_FLT_DIVIDE_BY_ZERO)
      cout << "Exception float divide by zero." << endl;
if (ec == EXCEPTION_FLT_OVERFLOW)
      cout << "Exception float OVERFLOW" << endl;
if (ec == EXCEPTION_FLT_DENORMAL_OPERAND)
      cout << "Exception float DENORMAL_OPERAND" << endl;
или вы не это имели ввиду?
P.S. не могу проверить у себя т.к. при компиляции происходит переполнение стэка строка(_controlfp(cw, _MCW_EM); )
как только решу проблему отпишусь
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.06.2012, 02:45
Привет! Вот еще темы с ответами:

исключения c++ - C++
Здраствуйте! Я тут приспособил код старого проекта чтобы побаловаться с исключениями. Перечитывал я тут недавно главу 14.6 из Страуструпа...

Исключения - C++
Здравствуйте, у меня есть немножко глупый вопрос: есть скажем функция a() { some code } Все равно поместить саму функцию а() в...

исключения - C++
программа реализует проверку на двоичное число: #include &lt;iostream&gt; #include &lt;string.h&gt; using namespace std; //класс исключений ...

Исключения - C++
Помогите пожалуйста с программой, ибо чё-то не даётся мне этот try... catch . Собственно задача: Вычислите 1/х как число с плавающей...


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
23.06.2012, 02:45
Ответ Создать тему
Опции темы

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