Преждевременное завершение выполнения программы

В некоторых случаях может возникнуть условие, при котором дальнейшее выполнение программы лишено смысла, например, отсутствует свободная память при использовании динамической памяти. В этом случае имеет смысл вывести сообщение об ошибке и прервать выполнение программы досрочно. Для этого предназначена функция exit(). Прототип функции:

#include <process.h>
void exit(int code);

В качестве параметра функция принимает число, которое является статусом завершения. Число 0 означает нормальное завершение программы, а любое другое число — некорректное завершение. Эти числа передаются операционной системе. Вместо чисел можно использовать макроопределения EXIT_SUCCESS (нормальное завершение) и EXIT_FAILURE (аварийное завершение). Определения макросов:

#include <cstdlib> /* или #include <stdlib.h> */
#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1

Пример:

exit(EXIT_FAILURE); // Аналогично exit(1);

Помимо функции exit() для аварийного завершения программы предназначена функция abort(). В этом случае завершение программы осуществляется операционной системой с выводом диалогового окна. Прототип функции:

#include <process.h>
void abort(void);

В качестве примера получим число от пользователя и выведем результат. При этом обработаем ошибку ввода (листинг 2.16).

Листинг 2.16. Преждевременное завершение выполнения программы

#include <iostream>
#include <clocale>
#include <cstdlib>
#include <process.h>

int main() {
   std::setlocale(LC_ALL, "Russian_Russia.1251");
   int x = 0;
   std::cout << "Введите число: ";
   std::cout.flush();
   std::cin >> x;
   if (!std::cin.good()) {
      std::cout << "Вы ввели не число" << std::endl;
      // Сбрасываем флаг ошибки, иначе окно закроется
      std::cin.clear();
      std::cin.ignore(200, '\n').get();
      // Завершаем выполнение программы
      exit(EXIT_FAILURE); // Аналогично exit(1);
   }
   std::cout << "Вы ввели: " << x << std::endl;
   std::cin.ignore(200, '\n').get();
   return 0;
}

В этом примере вместо функции exit() можно было воспользоваться инструкцией return, так как завершение программы выполнялось внутри функции main(). Однако в больших программах основная часть кода расположена вне функции main() и в этом случае инструкцией return для завершения всей программы уже не обойтись.

Учебник C++ (MinGW-W64)
Учебник C++ (MinGW-W64) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов