Как оставить консольное окно открытым после завершения работы программы (С++)

Часто требуется оставить окно консольного приложения открытым после того, как программа выполнила свою работу. Или приостановить выполнение до того, как будет нажата случайная клавиши. Существует несколько команд. Здесь собраны несколько, каждая из них имеет свой ряд сторонников и противников. Порядок перечисления произволен и ни о чём не говорит. Данная заметка не является результатом глубоких исследований и создана для текущих нужд группы. Используется язык С++.

Способы:

1.
system("pause");
//Реагирует на любую клавишу. Данная команда обращается к внешней ОС, которая и приостанавливает работу консоли. Способ удобен, но работает только в Windows.

2.
cin.get();
//Реагирует только на "Enter". Как и для всех операций ввода-вывода, должна быть подключена стандартная библиотека <iostream>.
(Это упрощённая запись команды cin.get(str,length) , предназначенной для извлечения из входного потока нескольких символов и помещения их в строку C-типа. Или, другой вариант применения, cin.get(ch) - извлечение одного символа. Если используете эту команду именно для извлечения символов, то будьте осторожны, поскольку в потоке может остаться символ конца строки.)

3.
getchar();
//Реагирует только на "Enter". Если не будет работать по умолчанию, то попробуйте подключить библиотеку <cstdio>
(Более точно, по своему исходному предназначению программа извлекает из потока и передаёт в программу один символ. Её можно использовать в выражениях вида ch = getchar(); )

4.
getch();
//Реагирует на любую клавишу.  Для использования команды необходимо подключить библиотеку <conio.h> (именно с '.h', по крайней мере на моей VS2017).
Visual Studio требует, чтобы команда была записана в виде _getch();. Стандартную запись команды (без предварительного знака подчёркивания) можно заставить работать, если подавить тормозящее её предупреждение через директиву #pragma warning (disable:4996) либо изначально создать проект через New Project >...>CLR.
то команда аналогична getchar() и также извлекает из потока один символ. Её также можно использовать в выражениях вида ch = getch() . Отличие заключается в том, что в getchar срабатывает только после нажатия на Enter, а getch реагирует на первое опускание пальца.)

5.
cin.ignore();
//Реагирует только на "Enter". Как и для всех операций ввода-вывода, должна быть подключена стандартная библиотека <iostream>. Альтернатива: <istream>
Если использовать дополнительные параметры, то поведение команды станет относительно сложным. Более подробно можно почитать на cplusplus.com. При использовании без параметров в данном контексте ведёт себя аналогично cin.get().

 

Уточнение работы cin.get(), getchar(), cin.ignore():
Эти команды срабатывают по нажатию на Enter и считывают из буфера один символ. Если требуется ввести эти команды несколько раз подряд (к примеру, каждый раз запускается новая итерация цикла) и перед нажатием Enter вы введёте несколько произвольных символов, то каждый из этим символов автоматически проглотится любой из этих команд.

Add new comment

Plain text

  • No HTML tags allowed.
  • Lines and paragraphs break automatically.
  • Web page addresses and email addresses turn into links automatically.