Как остановить консоль c
Перейти к содержимому

Как остановить консоль c

  • автор:

Задержка экрана консоли на C++

Итак, вы написали консольное приложение, компилятор построил его без ошибок, но после запуска программы окно приложения сразу закрывается, сейчас я расскажу как этого избежать.

Если вы пользуетесь Visual Studio 2008 или более ранней версией, Вам достаточно запускать программу из интерфейса компилятора с помощью нажатия клавиш Ctrl + F5.

Если Вы пользуетесь другим компилятором или хотите использовать Вашу программу вне компилятора, то возможны два способа создание задержки экрана. Первый — Прописать команду system(«pause»); в конце главной функции main, но перед оператором return, например:

 #include // Для работы с функцией system() using namespace std; int main() < setlocale(0,""); cout 

Эта системный оператор командной строки Windows, также можно реализовать задержку экрана с помощью оператора getch();, но для этого необходимо подключить библиотеку conio.h, пример ниже:

 #include // библиотека, необходимая для работы оператора getch(); using namespace std; int main() < setlocale(0,""); cout 

Вы можете применять любой из вышеприведенных способов, принципиальных отличий у них не наблюдается, все исходники в разделе C/C++ приведены без команды задержки экрана, так как были откомпилированы в среде Visual Studio 2008 и запускались из под ее интерфейса.

Пауза консоли в C++

Если речь идет только о работе в IDE, для приостановки работы программы можно использовать обычные точки останова и отладчик, какие-то специальные вызовы в коде не нужны. Более того, использование вызовов типа system("pause") приведет к тому, что программу невозможно будет нормально вызывать из пакетных файлов: она будет каждый раз ждать ввода с реальной консоли, даже если стандартный ввод перенаправлен из файла и ожидалась работа без участия пользователя. Но, если все же действительно нужно приостановить консоль при любом запуске программы, есть несколько вариантов:

system("PAUSE"); 
  • Отображает приглашение ввода ("Нажмите любую клавишу")
  • Прерывает работу программы до нажатия любой клавиши
  • Работает только под Windows (в других ОС нет команды PAUSE)
  • Внутренне вызывает командный интерпретатор, поэтому считается "тяжелым" вариантом (если производительность что-то значит в данном случае)

Есть миф, что такой вызов небезопасен, так как если поместить в папку с программой вредоносный файл pause.exe, он будет вызван вместо команды PAUSE. Это не так в современных версиях Windows.

system("PAUSE>nul"); 

То же самое, но не отображает приглашение ввода.

getchar(); //С cin.get(); //C++ 
  • Не отображает приглашение ввода
  • Прерывает работу программы до нажатия клавиши Enter
  • Стандартная функция - работает в любом окружении

В отличие от других вариантов, не ломает перенаправление стандартного ввода (достаточно поместить на вход строку любого содержания, и выполнение программы пойдет дальше).

#include getch(); //Традиционная _getch(); //Современный вариант 
  • Не отображает приглашение ввода
  • Прерывает работу программы до нажатия любой клавиши
  • Нестандартная функция, доступна в DOS и Windows (в других ОС есть похожие аналоги)

Опять же, существует миф, что в Windows это какой-то DOSовский вызов и использовать его - дикий криминал. На самом деле, внутренне он реализуется как обычный вызов WINAPI-функции ReadConsoleInput, с предварительным отключением у консоли режима ENABLE_LINE_INPUT. Убедиться в этом можно, заглянув в исходники отладочной версии CRT, которые с некоторого времени частично открыты.

прервать выполнение программы в консоли

А, вон он о чем. Мастерски вопросы люди задают, я шизею просто.

Готовься кивопросам «че это», «а как» и «напишите мне на языке программирования выход из программы».

Zhbert ★★★★★
( 29.11.17 13:54:48 MSK )
Ответ на: комментарий от waker 29.11.17 13:52:36 MSK

покажите как пожалуйста? программа закрывается с помощью ctrl+z

logonsessons
( 29.11.17 14:00:30 MSK ) автор топика
Ответ на: комментарий от logonsessons 29.11.17 14:00:30 MSK

Ну расскажите подробнее - что за программа, каким действием вы хотите ее закрыть, что вы уже пробовали, что нагуглили.

vaddd ★☆
( 29.11.17 14:37:59 MSK )
Ответ на: комментарий от vaddd 29.11.17 14:37:59 MSK

закрывается с помощью ctrl+z она

logonsessons
( 29.11.17 14:38:59 MSK ) автор топика

cnsr
( 29.11.17 14:42:06 MSK )

Как программно реализовать такой выход в консоли

Как из другой программы закрыть эту программу?
Как свою программу сделать закрывающейся по Q?
Сформулируй, что тебе вообще нужно-то, а то вон телепаты мимо бьют.

massimus ★★★
( 29.11.17 14:42:30 MSK )
Ответ на: комментарий от logonsessons 29.11.17 14:38:59 MSK

Ну расскажите подробнее - что за программа, каким действием вы хотите ее закрыть, что вы уже пробовали, что нагуглили.

Какой информативный ответ. Так и быть, давайте еще раз попробуем:

ну расскажите подробнее - что за программа, каким действием вы хотите ее закрыть, что вы уже пробовали, что нагуглили.

Как задержать окно консоли от закрытия?

в общем ребята в чем суть дела, я решил пройти книгу Б. Страуструп "Программирование. Принципы и практика использования С++", и нелепая ситуация 2 задача и все.Вот скрины.

Пробывал и так и этак, в общем ничего.

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Скорочтение (как задержать консольное окно на определённое время?)
как задержать консульное окно на определёное время?

Задержать закрытие окна консоли после выполнения программы
Какой командой задержать экран C++ после выполнения программы, а то он сразу исчезает.

Как очистить окно консоли?
Здравствуйте! Есть к примеру программа - калькулятор а консоли! Она работает так, ввели число.

Как убрать окно консоли
Всем привет! Посмотрите как можно убрать черное окно чтобы осталась только окно диалога.

2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
Не читайте Страуструпа на этой стадии. Почитайте Шилда с++.
87 / 68 / 19
Регистрация: 07.03.2011
Сообщений: 169

Добавьте к проекту файл std_lib_facilities.h, который есть на сайте Страуструпа. Вот: http://stroustrup.com/Programm. cilities.h

Регистрация: 22.08.2014
Сообщений: 104

Под винду добавляют
system("pause");

1 2 3 4 5 6 7 8 9 10 11 12 13
#include using namespace std; int main() { setlocale (LC_ALL, "Russian"); cout  "Привет, мир!\n"; system("pause"); return 0; }

Можно еще так

1 2 3 4 5 6 7 8
#include using namespace std; int main() { cout  "TEXT\n"; cin.get(); return 0; }
1 2 3 4 5 6 7
#include int main() { getch(); return 0; }

Эксперт CЭксперт С++

11126 / 6084 / 1663
Регистрация: 18.10.2014
Сообщений: 15,294

ЦитатаСообщение от лютый проггер Посмотреть сообщение

Пробывал и так и этак, в общем ничего.

Не занимайтесь ерундой.

Если вы пользуетесь Visual Studio и запускаете свою программу в пошаговом отладчике (Start Debugging - F5), то эта проблема вас вообще не должна интересовать.

Если же вы запускаете программу на полноценное выполнение (Start Without Debugging - Ctrl+F5), то консольное окно и так не должно закрываться при завершении программы. Если же оно у вас таки закрывается, то идите в настройки проекта 'Linker -> System' и исправьте настройку 'SubSystem' на 'Console'. Окно перестанет закрываться само по себе, а будет просить вас нажать клавишу, как это делает системная команда "pause".

Т.е. не надо заниматься этой фигней с 'system("pause");' или . Все, что вам нужно, уже встроено прямо в Visual Studio.

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Как расширить окно консоли
какой командой можно расширить окно консоли?а то у меня прога много выводит,и начало ,не с начала.

Как программно создать процесс, который создаёт окно консоли?
Имеется ввиду, конечно настоящее отдельное окно консоли. Вот создаваемый процесс: #include.

Как сделать так, чтобы окно консоли не сразу закрывалось
подскажите пожалуйста, как сделать так чтобы окошко программы не сразу закрывалось, чтобы я мог.

После закрытия консоли выскакивает исключение if (!has_cctor) _cexit();
что с этим делать? буквально пол часа назад все нормально было код: #include "windows.h".

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *