Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Поддержка расширенных символов

Поиск

При работе с C++ имеется встроенный тип данных wchar_t, wchar_t – ключевое слово, а в стандарте С99 wchar_t определен в нескольких заголовочных файлах: <stddef.h> <stdlib.h> <wchar.h> <wctype.h>

В C++ реализуется поддержка ввода-вывода для расширенных символов с помощью заголовочного файла <iostream.h>. Стандарт С99 поддерживает многобайтные символы, что невозможно в C++.


 

Глава 14. Исключения и их обработка

Исключение – это некоторое действие, которое выполняется при наступлении нестандартных ситуаций.

Говоря о об исключениях в С++, рассмотрим одну из таких нестандартных ситуаций — деление на 0. Представьте, что мы работаем в программе, где вручную вносим много числовых данных. Далее, в результате каких-то расчетов программы, значение одной из переменных станет равным 0. А в следующей строке кода это значение выступает делителем. Конечно, это действие приведет к неизбежному закрытию программы и выходу из нее. А теперь представьте, какие чувства вы испытаете, когда полчаса вводите данные, работая в этой программе, и на каком-то этапе она просто перестает работать и закрывается, а все данные пропадают.

Пример 1

В переменную num 2 необходимо записать значение 0 для понимания сути проблемы.

#include <iostream>;

using namespace std;

 

Int main()

{

setlocale(LC_ALL, "rus");

 

int num 1;

int num2;

int var = 2; //управляющая переменная для while

 

while(var--)

{

   cout << "Введите значение num1: ";

   cin >> num1;

   cout << "Введите значение num2: ";

   cin >> num2;

 

   cout << "num1 + num2 = " << num1 + num2 << endl;

   cout << "num1 / num2 = " << num1 / num2 << endl;

   cout << "num1 - num2 = " << num1 - num2 << endl;

   cout << "=================================" << endl << endl;

}

 

cout << "Программа завершила работу!" << endl << endl;

 

return 0;

}

 


 

В программе цикл должен отработать два раза. В строке 12 мы передаем циклу значение переменной var и в этой же строке уменьшаем её на единицу, используя операцию декремента (var--). Но если в переменную num2 будет введено значение 0, мы увидим только результат сложения a + b, и программа завершит работу независимо от того, есть код ниже или нет, отработал цикл или нет.

Используя исключения, мы сможем избежать таких проблем. Чтобы «прикрутить» исключение к этому примеру, надо познакомиться со следующими командами С++: throw, try, catch. В исходном коде ниже исключение сработает так: программа получает конкретное указание от программиста — если значение определённой переменной в определённом участке кода (в try-блоке) будет равно 0, то в этом случае пусть генерируется исключение throw. Это исключение автоматически передастся catch -блоку в виде параметра и выполнится код этого блока.

Пример 2.

#include <iostream>;

using namespace std;

 

Int main()

{

setlocale(LC_ALL, "rus");

 

int num1;

int num2;

int var = 2;

 

while (var --)

{

   cout << "Введите значение num1: ";

   cin >> num1;

   cout << "Введите значение num2: ";

   cin >> num2;

 

   cout << "num1 + num2 = " << num1 + num2 << endl;

   cout << "num1 / num2 = ";

 

   try //код, который может привести к ошибке, располагается тут

   {

       if (num2 == 0)

       {

           throw 123; //генерировать целое число 123

       }

       cout << num1 / num2 << endl;

   }

   catch(int i)// сюда передастся число 123

   {

       cout << "Ошибка №" << i << " - на 0 делить нельзя!!!!" << endl;

   }

 

   cout << "num1 - num2 = " << num1 - num2 << endl;

   cout << "=================================" << endl << endl;

}

 

cout << "Программа завершила работу!" << endl << endl;;

 

return 0;

}

 

В этом коде сначала был определен try-блок. В нем располагается код, который потенциально может вызвать ошибку в работе программы, а именно ошибку в случае деления на 0. Задаем условие if — если num2 равно 0, то генерировать целое число 123, к примеру. В этом случае try-блок сразу прекращает выполнение дальнейших команд, а число 123 «падает» в catch. В нашем примере он выводит сообщение об ошибке. При этом программа продолжает работать и выполнять команды, размещенные ниже. Если же число num2 не будет равно нулю, то в try-блоке выполнится команда cout << num1 / num2 << endl;, а catch не сработает.

Приложение 1.



Поделиться:


Последнее изменение этой страницы: 2021-07-18; просмотров: 54; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.1.100 (0.009 с.)