Как сделать чтобы exe файл не закрывался c

Обновлено: 04.07.2024

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

Если вы используете Visual Studio и запускаете консольное приложение из IDE:

клавишей CTRL-F5 (запуск без отладки) запустит приложение и будет держать окно консоли открытым, пока вы не нажмете любую клавишу.

Если вы используете Microsoft Visual C++ 2010 Express и столкнетесь с проблемой с CTRL+F5 не работает для сохранения консоли открытой после завершения программы, взгляните на этот поток MSDN.

вероятно, ваша IDE настроена на закрытие консоли после запуска CTRL+F5; фактически, "пустой проект" в Visual C++ 2010 закрывает консоль по умолчанию. Чтобы изменить это, сделайте так, как предложил модератор Microsoft:

пожалуйста, правильно щелкните имя проекта и перейдите на страницу свойства, разверните свойства конфигурации -> Компоновщик -> система, выберите консоль (/SUBSYSTEM:CONSOLE) в раскрывающемся списке подсистема. Потому что, по умолчанию, пустой проект не указывает его.

Я обычно просто ставлю точку останова на main() закрывающая фигурная скобка. Когда конец программы будет достигнут любыми средствами, точка останова ударит, и вы можете ALT-Tab в окно консоли для просмотра вывода.

Почему бы просто не запустить программу из консоли ie запустить программу из cmd.exe, если вы используете Windows. Таким образом, окно остается открытым после завершения программы.

[EDIT]: когда я использую KDevelop4, есть полноценный экземпляр Bash (Linux CLI), работающий на вкладке в нижней части IDE. Это то, что я использую в таких обстоятельствах.

перед окончанием кода вставьте следующую строку:

это будет держать консоль, пока вы не нажмете клавишу.

Если вы запускаете свой код из компетентной IDE, например Code:: Blocks, IDE будет управлять консолью, которую он использует для запуска кода, сохраняя ее открытой при закрытии приложения. Вы не хотите добавлять специальный код, чтобы держать консоль открытой, потому что это помешает ей работать правильно, когда вы используете ее для реального, вне IDE.

хорошо, я предполагаю, что вы находитесь на Windows, используя Visual Studio. зачем? Ну, потому что если вы находитесь на какой-то ОС Linux, то вы, вероятно, будете запускать его с консоли.

в любом случае, вы можете добавить дерьмо в конце вашей программы, как другие предлагают, или вы можете просто нажать CTRL + F5 (запуск без отладки)и Visual Studio оставит консоль после завершения.

другой вариант, если вы хотите запустить отладочную версию и не добавить хрень ваш код, чтобы открыть окно консоли (Пуск -> Выполнить -> cmd) и перейдите в папку отладка выходного каталога. Затем просто введите имя исполняемого файла, и он будет запускать программу отладки в консоли. Затем вы можете использовать приложение Visual Studio для процесса или что-то еще, если вы действительно хотите.

Если вы действительно отлаживаете приложение в Visual C++, нажмите F5 или зеленый треугольник на панели инструментов. Если вы на самом деле не отлаживаете его (у вас нет установленных точек останова), нажмите Ctrl+F5 или выберите "пуск без отладки" в меню (обычно это меню отладки, которое я согласен, сбивает с толку.) Это будет немного быстрее, и что более важно для вас, будет пауза в конце без необходимости изменения кода.

кроме того, откройте командную строку, перейдите в папка, в которой находится ваш exe, и запустите его, введя его имя. Таким образом, когда он закончит работу, командная строка не закрывается, и вы можете видеть вывод. Я предпочитаю оба этих метода для добавления кода, который останавливает приложение так же, как его закончил.

добавьте следующую строку в конце программы. Он будет пытаться захватить некоторую форму пользовательского ввода, таким образом, он останавливает консоль от автоматического закрытия.

Это наверное embarasing вопрос, без сомнения, ответ будет совершенно очевидной.

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

когда я запускаю приложение, появляется окно консоли, вывод программы, а затем окно закрывается по мере выхода приложения.

есть ли способ либо сохранить его открытым, пока я не проверил вывод, либо просмотреть результаты после окно закрыто?

Если вы работаете без отладки (Ctrl+F5), то по умолчанию он предлагает вам нажать return, чтобы закрыть окно. Если вы хотите использовать отладчик, вы должны поставить точку останова на последней строке.

Правой Кнопкой Мыши на вашем проекте

Свойства>Свойства Конфигурации> Компоновщик - > Система

выберите консоль (/SUBSYSTEM:CONSOLE) в .

теперь попробуйте. он должен работать

вот способ для C / C++:

Меню Отладки Goto ->пресс StartWithoutDebugging

Он будет ждать <ENTER> .

попробуйте позвонить getchar() перед main() возвращает.

(/SUBSYSTEM:CONSOLE) не работал для моего vs2013 (у меня уже был).

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

решение используется в qtcreator до 2.6. Теперь, когда qt растет, vs идет другим путем. Как я помню, в vs2008 нам не нужны такие фокусы.

вот решение, которое (1) не требует никаких изменений кода или точек останова и (2) приостанавливает после завершения работы программы так что вы можете видеть все это было напечатано. Он будет приостановлен после F5 или Ctrl+F5. Основным недостатком является то, что на VS2013 Express (как проверено) он не загружает символы, поэтому отладка очень ограничена.

создать пакетный файл. Я назвал свое runthenpause.bat , со следующими содержание:

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

откройте свойства проекта | свойства конфигурации | отладка.

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

я опубликую обновление, если выясню, как загрузить символы. Я пытался!--5--> per этой но без успеха.

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

и таким образом окно не будет закрываться, пока вы не введете данные для a переменной.

добавить "/ pause " в поле аргументы команды в разделе отладки в свойствах проекта.

просто нажмите CNTRL + F5, чтобы открыть его во внешнем окне командной строки (Visual Studio не имеет контроля над ним).

Если это не работает, добавьте следующее в конец вашего кода:

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

Если вы хотите сделать это в нескольких местах, поставить выше код в метод (например, private void Pause() ) и вызов Pause() каждый раз, когда программа достигает возможного конец.

Предотвращение закрытия окна консоли в приложении консоли Visual Studio C / C ++

Как предотвратить закрытие окна консоли в Visual Studio C / C ++

Это, вероятно, неудобный вопрос, поскольку, без сомнения, ответ ослепляюще очевиден.

Когда я запускаю свое приложение, появляется окно консоли, появляется вывод программы, а затем окно закрывается при выходе из приложения.

Есть ли способ оставить его открытым, пока я не проверю вывод, или просмотреть результаты после закрытия окна?

  • Monodevelop делает то, что вы ожидаете.
  • Согласовано. Я думаю, что лучший ответ для VS 2017 и новее - от chronoxor.

Начиная с Visual Studio 2017 (15.9.4) есть возможность:

Соответствующий фрагмент из документации Visual Studio:

Автоматически закрывать консоль при остановке отладки:

Сообщает Visual Studio закрыть консоль в конце сеанса отладки.

  • 4 Я только что протестировал это в VS2017 и VS2019. Это требует как настройки подсистемы на КОНСОЛЬ, так и выключения этой опции. При наличии одного или другого окно автоматически закрывается.
  • Это по-прежнему закрывает для меня окно, если я запускаю несколько проектов из одного решения.
  • Я чувствую, что это правильный ответ для VS 2017 и последующих лет. Жаль, что этого нет в старых версиях.

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

Щелкните правой кнопкой мыши свой проект

Свойства> Свойства конфигурации> Компоновщик> Система

Выбрать Консоль (/ SUBSYSTEM: CONSOLE) в SubSystem вариант или вы можете просто ввести Приставка в текстовом поле!

Теперь попробуйте . он должен работать

  • Это сработало для моего VS2013 Express, но принятый ответ - нет. Очень странно, поскольку принятый ответ работал для всех версий Visual Studio, которые я использовал в прошлом.
  • 9 @MichaelCalvin Вы должны запустить с Ctrl + F5 после установки этого, это кикер.
  • как заявил @JonathanMee, вы все еще использовали Ctrl + F5. Это уже было установлено в моей визуальной студии 2015, поэтому первый ответ оказался наиболее полезным.
  • Это действительно так. Знакомый CTRL+F5 не удастся, если вы, скажем, добавите новый файл C ++ в пустой проект.
  • У меня работал над Visual Studio Express 2015. Спасибо.

Вот способ для C / C ++:

  • Этот метод не работает в Visual C ++ (если вы не добавили заголовок?)
  • 2 @wmac Вы должны включить заголовок windows.h
  • 1 Я не включил ни одну библиотеку или пространство имен, но оно работает правильно, большое спасибо.
  • 1 Не делай этого, пожалуйста. В pause команда специфична для Windows.
  • У меня работал над Visual Studio 2013 Express. :)

Перейти к меню отладки->Нажмите StartWithoutDebugging

  • 10 +1 - Либо это, либо Console.ReadKey() просто ждать любой клавиши.
  • Странно, но в моем приложении это не действует. Он по-прежнему закрывается, не дожидаясь ввода данных пользователем.
  • 4 Тогда ваш код, скорее всего, завершится до того, как достигнет этой точки.
  • Не лучшее решение, если вы запускаете тесты, так как они заставят ваши тесты зависать и никогда не завершаться.

Попробуйте позвонить getchar() прямо перед main() возвращается.

  • Не работает в VS 2008 для простого консольного приложения Hello Name. cout, cin, cout, getchar (), консоль все еще закрывается. В чем дело?
  • 1 Попробуйте поместить getchar () дважды, если у вас есть cout непосредственно перед getchar (). getchar () ожидает char, а вы уже даете его cout . Сообщите мне, поможет ли это :)

(/ SUBSYSTEM: CONSOLE) не работал для моего vs2013 (у меня он уже был).

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

Решение, используемое в qtcreator до 2.6. Теперь, когда qt растет, vs идет другим путем. Насколько я помню, в vs2008 нам такие ухищрения не понадобились.

Вот решение, которое (1) не требует изменений кода или точек останова и (2) приостанавливает работу после завершения программы чтобы вы могли видеть все это было напечатано. Он будет приостановлен после F5 или Ctrl + F5. Основным недостатком является то, что в VS2013 Express (как было проверено) он не загружает символы, поэтому отладка очень ограничена.

Создайте командный файл. Я позвонил своему runthenpause.bat , со следующим содержанием:

Первая строка будет запускать любую предоставленную вами команду и до восьми аргументов. Вторая строка . пауза.

Откройте свойства проекта | Свойства конфигурации | Отладка.

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

Я опубликую обновление, если выясню, как загрузить символы. Я старался /Z7 за это, но безуспешно.

  • 1 Это все еще не поддерживает отладку, но, по крайней мере, решает проблему отсутствия вывода, например. VLD, в отличие от все другие ответы.

просто введите в качестве последней строки кода:

Вы можете запустить исполняемый файл из командной строки. Таким образом, вы могли видеть весь результат. Или вы можете сделать что-то вроде этого:

и таким образом окно не закроется, пока вы не введете данные для a переменная.

  • 4 Это было бы отличным решением, если бы оно работало. pause похоже, работает только в пакетных файлах, и хотя он получает ввод от вашей программы на STDIN, он не распечатывает этот текст повторно. Я пробовал заменить | с участием && , но это не повлияло - предположительно, потому что он не выполняется с помощью командной оболочки (cmd.exe).

Просто нажмите CNTRL + F5, чтобы открыть его во внешнем окне командной строки (Visual Studio не контролирует его).

Если это не сработает, добавьте в конец кода следующее:

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

Если вы хотите сделать это в нескольких местах, поместите приведенный выше код в метод (например, private void Pause() ) и звоните Pause() всякий раз, когда программа достигает возможного конца.

Несколько лучшее решение:

в начале вашей программы.

  • можно использовать std :: exit ()
  • может иметь несколько возвратов из основного
  • вы можете запустить свою программу под отладчиком
  • Независимость от IDE (+ независимость от ОС, если вы используете cin.sync(); cin.ignore(); трюк вместо system('pause'); )
  • нужно изменить код
  • не будет останавливаться на std :: terminate ()
  • все равно будет происходить в вашей программе вне сеанса IDE / отладчика; вы можете предотвратить это в Windows, используя:
  • Очень плохой совет.
  • Можете объяснить почему?
  • В случае, когда отладка не ведется, она не делает ничего полезного, потому что в этом случае нет проблемы, которую нужно решать. В VS просто запустите программу с помощью Ctrl + F5 и все, так что в VS нет проблем, а в интерпретаторе команд нет проблем, короче говоря, нет проблем. А в случае, когда кто-то отлаживает и хочет, чтобы код остановки остановился, это не более удобное решение, чем точка останова, и вмешивается в ситуации, когда остановка не нужна.

Обязательно сделайте любой из них в конце main() функция и до return заявление.

Вы также можете использовать эту опцию

Visual Studio 2015, с участием импорт. Потому что я ненавижу, когда примеры кода не дают необходимого импорта.

Перейдите в Настройки> Отладка> Снять галочку рядом.


В настоящее время нет возможности сделать это с приложениями, работающими в WSL2. Однако есть два обходных пути:

В окне отладки сохраняется содержимое закрытого окна оболочки WSL.

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

Моя проблема в том, что в Windows есть окна командной строки, которые закрываются сразу после выполнения. Чтобы решить эту проблему, я хочу, чтобы по умолчанию было открыто окно. Обычно такого поведения можно избежать тремя способами, которые приходят мне в голову:

Но есть и другие случаи, когда пользователь:

Я прочитал статью об изменении поведения cmd.exe умолчанию при его явном открытии с созданием записи автозапуска и манипулированием ее содержимым в следующих местах:

(Элементы _String values_ )

Я поставил cmd /d /k в качестве значения, чтобы попробовать, но это никак не изменило поведение вышеупомянутых вещей . Он просто изменил поведение окна командной строки при его явном открытии (Start-Run-cmd.exe).

Итак, как это работает? Можете ли вы дать мне какие-либо идеи для решения этой проблемы?

У меня есть решение, которое может применяться только к файлам .cmd и .bat :

Откройте regedit и перейдите к каждому из:

Обратите внимание, что это похоже на использование cmd.exe /c cmd.exe /k program.bat , что означает, что другой экземпляр CMD будет запущен в родительский. Я не мог найти, как перезаписать первый аргумент /c .

Вы также можете сделать это с [exefile] , но теперь он покажет пустое поле консоли, если исполняемый файл имеет графический интерфейс.

Другими словами, консольное окно Win32 всегда будет закрыто при выходе из последней программы, работающей внутри него, и вы не можете это изменить.

(Для 16-разрядных программ MS-DOS в диалоговом окне свойств Windows предлагается параметр "Закрыть при выходе", но это не исключение из описанного выше поведения: это процесс NTVDM, который удерживает окно открытым. Кроме того, эта опция снова для каждой программы.)

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

cmd.exe /k доставит вам неприятности с какой-то партией. Если пакетный exit 1 (без /B ), ваша консоль будет закрыта. Хитрость заключается в использовании:

Чтобы использовать это по умолчанию для всех пакетных файлов, установите для HKEY_CLASSES_ROOT\cmdfile\shell\open\command\(default) и HKEY_CLASSES_ROOT\batfile\shell\open\command\(default) значение "%windir%\system32\cmd.exe" /k "%windir%\system32\cmd" /c "%1" %* .

Я просто grawity решение после прочтения ответа Гравити .

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

Мое решение (только что протестировано на Win7), так как добавить cmd в качестве последней строки в командном файле. Это запускает вложенную командную строку, которая наследует среду своего родителя. Эта дочерняя оболочка удерживает пакетный процесс открытым до тех пор, пока вы не ВЫХОДИТЕ, и в этот момент пакет не имеет дочерних процессов и также завершает работу.

Вместо того, чтобы использовать PAUSE (я предпочитаю, чтобы CHOICE или TIMEOUT использовали PAUSE при необходимости), вы можете использовать решение здесь: 886848/how-to-make-windows-batch-file-pause-when-double-click.

Используя CHOICE, вы можете запрограммировать возможность выбора пользователем различных действий, а использование TIMEOUT может позволить окну закрыться через некоторое время (без присмотра). Если вы запускаете командный файл из окна командной строки, эти паузы могут раздражать.

Связанное решение позволит вам решить, хотите ли вы пропустить паузы, если пакетный файл был запущен из окна командной строки.

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

определить, был ли командный файл запущен из командного окна или нет.

Итак, вы используете это так:

В тот момент, когда пакетный файл будет завершен, вы добавите некоторый код, подобный следующему:

Читайте также: