EXIT()
Функция exit(), находящаяся в стандартной библиотеке, вызывает немедленное окончание работы программы. Поскольку функция exit() останавливает выполнение программы и форсирует возврат в операционную систему, она используется для управления устройствами, и ее использует подавляющее большинство программ. Функция exit() имеет следующий вид:
void exit (int статус);
Она использует заголовочный файл stdlib.h. Значение статуса возвращается в операционную систему.
Для индикации корректности завершения работы exit() традиционно вызывается с аргументом 0.
Другие аргументы используются для индикации различного рода ошибок. Можно также использовать предопределенные макросы EXIT_SUCCESS и EXIT_FAILURE в качестве значений для статуса.
exit() используется, когда условия выполнения программы неудовлетворительны. Например компьютерная игра может требовать специальный графический адаптер. Функция main() данной игры может выглядеть следующим образом:
#include
int main(void)
if (!special_adaptor()) exit(1);
play ();
return 0;
>
где special_adaptor() — это определенная пользователем функция, возвращающая истину, если необходимый адаптер присутствует. Если карта в системе отсутствует, то данная функция возвращает ложь и программа завершает работу.
В другом примере exit() используется для выхода из программы и возврата в операционную систему
void menu(void)
char ch;
printf («1. Check Spelling\n»);
printf («2. Correct Spelling, Errors\n»);
printf(«3. Display Spelling Errors\n»);
printf(«4. Quit\n»);
printf(» Enter your choice: «);
do ch = getchar(); /* чтение клавиатуры */
switch(ch)
case ‘1’:
check_spelling();
break;
case ‘2’:
correct_errors();
break;
case ‘3’:
display_errors ();
break;
case ‘4’:
exit(0); /* возврат в ОС*/
>
>
while(ch!=’1′ && ch!=’2′ && ch!=’3′);
>
Завершение программы C++
Функция, объявленная exit в , завершает программу C++. Значение, предоставленное в качестве аргумента exit , возвращается операционной системе в качестве возвращаемого кода программы или кода выхода. Принято, чтобы нулевым кодом возврата обозначалось, что программа завершена успешно. Константы EXIT_FAILURE можно использовать, а EXIT_SUCCESS также определенные в , чтобы указать успешность или сбой программы.
Функция abort
Функция abort , объявленная в стандартном формате, включает , завершает программу C++. Разница между exit и abort заключается в том, что exit обработка завершения среды выполнения C++ выполняется (вызывается глобальные деструкторы объектов). abort немедленно завершает программу. Функция abort проходит обычный процесс уничтожения для инициализированных глобальных статических объектов. Также осуществляется обход всей специальной обработки, которая была задана с помощью функции atexit .
Корпорация Майкрософт: по соображениям совместимости Windows реализация abort microsoft может разрешить выполнение кода завершения библиотеки DLL в определенных обстоятельствах. Дополнительные сведения см. в разделе abort .
Функция atexit
Используйте функцию atexit , чтобы указать действия, выполняемые до завершения программы. Перед выполнением функции выхода не инициализированы глобальные статические объекты, инициализированные перед вызовом atexit .
return оператор in main
Инструкция return позволяет указать возвращаемое значение из main . Оператор return в main первую очередь действует как любая другая return инструкция. Все автоматические переменные уничтожаются. main Затем вызывает возвращаемое exit значение в качестве параметра. Рассмотрим следующий пример:
// return_statement.cpp #include struct S < int value; >; int main() < S s< 3 >; exit( 3 ); // or return 3; >
return Операторы exit , описанные в предыдущем примере, имеют аналогичное поведение. Как завершить программу, так и вернуть значение 3 операционной системе. Разница заключается в том, что exit не уничтожает автоматическую переменную s , а return оператор делает.
Как правило, C++ требует, чтобы функции, имеющие возвращаемые типы, отличные от void возвращаемого значения. Функция является исключением. Она main может завершиться без инструкции return . В этом случае он возвращает значение, зависящее от реализации, в вызывающий процесс. (По умолчанию MSVC возвращает значение 0.)
Уничтожение потоков и статических объектов
При вызове exit напрямую (или при вызове после оператора из main ), объекты потоков, связанные с текущим потоком return , уничтожаются. Затем статические объекты уничтожаются в обратном порядке их инициализации (после вызовов функций, указанных в , если таковые имеются atexit ). В следующем примере показано выполнение такого процесса инициализации и удаления.
Пример
В следующем примере статические объекты sd1 создаются и sd2 инициализированы перед записью main . После завершения работы этой программы с помощью инструкции return сначала sd2 уничтожается, а затем sd1 . Деструктор класса ShowData закрывает файлы, связанные с этими статическими объектами.
// using_exit_or_return1.cpp #include class ShowData < public: // Constructor opens a file. ShowData( const char *szDev ) < errno_t err; err = fopen_s(&OutputDev, szDev, "w" ); >// Destructor closes the file. ~ShowData() < fclose( OutputDev ); >// Disp function shows a string on the output device. void Disp( char *szData ) < fputs( szData, OutputDev ); >private: FILE *OutputDev; >; // Define a static object of type ShowData. The output device // selected is "CON" -- the standard output device. ShowData sd1 = "CON"; // Define another static object of type ShowData. The output // is directed to a file called "HELLO.DAT" ShowData sd2 = "hello.dat"; int main()
Другой способ написания этого кода заключается в объявлении ShowData объектов с блоком область, который неявно уничтожает их при выходе из область:
Как использовать функцию exit() в C++
Сегодня мы поговорим о функции exit() в C++. Как вы наверняка знаете, в C++ выйти из циклов можно при помощи встроенной функции break. Используя функцию exit(), можно точно так же выйти из всей программы C++.
Представьте ситуацию: вы должны сделать некоторые выводы по поводу работы вашей программы. Вы получаете результат и делаете какой-то вывод до того, как программа будет скомпилирована или оценена.
Как завершить работу программы, получив необходимую информацию или результат?
Ответ на поставленный выше вопрос – использовать встроенную функцию exit(). Итак, давайте же подробнее рассмотрим данную функцию и то, как она работает.
Определение функции exit()

Теоретически функция exit() в C++ приводит к завершению соответствующей программы, как только эта функция выполняется, – то есть независимо от того, где она появляется в программе. Функция определена в заголовочном файле stdlib.h, который необходимо включать при использовании функции exit().
Синтаксис функции exit()
Функция exit() использует приведенный ниже синтаксис.
exit( exit_value );
Здесь exit_value — это значение, переданное операционной системе после успешного завершения программы. Данное значение можно проверить в пакетных файлах, где ERROR LEVEL показывает нам возвращаемое значение, предоставленное функцией exit(). Как правило, значение 0 указывает на успешное завершение, а любое другое число сообщает, что произошла какая-то ошибка.
Работа функции exit() в C++
Помните, что функция exit() никогда не возвращает никакого значения. Она завершает процесс и выполняет стандартную очистку завершения программ.
Кроме того, при вызове этой функции автоматические объекты хранилища не уничтожаются.
Посмотрите внимательно на пример ниже:
#include using namespace std; int main() < int i; cout>i; if(i) // checks whether the user input is non-zero or not < coutelse < coutcout
Вы получите такой вывод:
Enter a non-zero value: 0 ERROR!
- Поскольку пользовательский ввод для представленного выше кода равен нулю (0), выполняется часть else оператора if-else. Дальше компилятор встречает функцию exit() и завершает программу.
- Оператор print после if-else не выполняется, так как программа уже была завершена функцией exit().
Теперь давайте посмотрим на другой пример, в котором мы попытаемся определить, является число простым или нет.
Использование функции exit()
В приведенной ниже программе вы увидите, как используется функция exit().
#include using namespace std; int main() < int i,num; cout>num; for(i=2;i > cout
Вы получите такой результат:

Давайте рассмотрим приведенный выше код подробнее:
- Сначала мы взяли пользовательский ввод числа. Нам нужно было проверить, является это число простым или нет.
- После этого мы применили цикл for, который работает от 2 до n/2, поскольку мы уже знаем, что все числа делятся на 1, а число неделимо на числа, превышающие его половину.
- Внутри цикла for мы проверили, делится ли число на итератор цикла в данный момент. Если это так, мы можем напрямую заключить, что число не является простым, и завершить программу с помощью функции exit().
- В противном случае цикл продолжает проверку. После выполнения всей структуры цикла программа объявляет число простым.
Заключение
В этом руководстве мы изучили работу и использование встроенной функции exit() в C++. Она широко используется для завершения выполнения программы.
Читайте также:
- Полезный материал на stackoverflow
- Сравнение строк в C++: три основных метода
Остановить программу на Си
P.S. Все-таки «вызовите» с маленькой буквы, ибо предложение в моей голове звучало как «Еще раз сканф вызовите в конце и все.». Если это грамматически неверно, то поправьте еще раз.
Отслеживать
ответ дан 17 сен 2011 в 13:25
AlexDenisov AlexDenisov
6,452 1 1 золотой знак 21 21 серебряный знак 29 29 бронзовых знаков
Или getch(); , или while(!kbhit()); .
17 сен 2011 в 13:26
Все дело в том, что при нажатии [Enter] в поток стандартного ввода кроме набранных Вами символов числа заносится символ перевода строки (‘\n’). getchar() считывает его и программа не дожидается следующего [Enter], чего Вы видимо хотите.
Реально, в Вашем случае (я думаю это консоль в Виндоус), вызовите (как уже отвечено @Tim и @gecube) getch(). Эта функция ожидает нажатия символа на клавиатуре и возвращает его код. Данный символ не заносится (!) в поток стандартного ввода и более того, даже в случае если это ^Z не закрывает поток (EOF в таком случае Вы не получите).
kbhit() опрашивает клавиатуру без ожидания («жрет процессор») и возвращает 0, если никакая клавиша не нажата и 1 (не код введенного символа!) если что-нибудь нажали. Код нажатой клавиши помещается в конец потока стандартного ввода.
Надеюсь эта информация окажется Вам полезной при программировании ввода с консоли.