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

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

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

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

22.06.2012, 17:57. Просмотров 847. Ответов 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");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.06.2012, 17:57     Обработка сиситемного исключения
Посмотрите здесь:

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

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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"
Dady
2 / 2 / 0
Регистрация: 20.03.2012
Сообщений: 53
22.06.2012, 18:26  [ТС]     Обработка сиситемного исключения #3
Цитата Сообщение от cppGhost Посмотреть сообщение
использовать try/catch и _try/_catch одновременно нельзя
А где я использую catch?
cppGhost
32 / 30 / 1
Регистрация: 21.06.2012
Сообщений: 91
22.06.2012, 18:38     Обработка сиситемного исключения #4
Значит я не понял вопрос. Вы сказали
Нужно ещё кроме деления на 0, использовать другие исключения
Под другими я понял именно исключения c++, а не глянул в код =)

вот тут кое-что есть
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.06.2012, 02:45     Обработка сиситемного исключения
Еще ссылки по теме:

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

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

Исключения - C++
Как бросить исключение выхода за границы массива? Как его поймать? Что делать после отбрасывания? TItem &amp; TArray::operator (unsigned...

Исключения - C++
Ребят, тут такая тема. В общем нужно при вводе данных смотреть на исключения, т.е. если ввели в int буквы - пробросить исключение. С этим я...

Исключения - C++
можно ли возвращаться к выполнению кода после обработки исключения, например try{ func1();//обе ф-и могут вызывать исключение...

Исключения - C++
читаю про исключения, сама концепция понятна, но стоит ли вообще заострять на исключениях своё внимание? например описан класс exception,...


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

Или воспользуйтесь поиском по форуму:
Андрей\
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); )
как только решу проблему отпишусь
Yandex
Объявления
23.06.2012, 02:45     Обработка сиситемного исключения
Ответ Создать тему
Опции темы

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